01_Grafické rozhraní

Rozměr: px
Začít zobrazení ze stránky:

Download "01_Grafické rozhraní"

Transkript

1 01_Grafické rozhraní Jaké jsou základní rozdíly mezi konzolovou aplikací a aplikací s grafickým uživatelským rozhraním? Hlavní rozdíly mezi běžnou konzolovou aplikací a aplikací s GUI lze shrnout do dvou základních bodů: - použití komponent (např. existence hlavního okna s ovládacími prvky) a - událostmi řízené programování (to je sice možné realizovat i v konzolových aplikacích, ale není to běžné). Princip GUI aplikace je tedy postaven na používání komponent a komunikaci mezi nimi (případně mezi nimi a uživatelem). Jak funguje událostmi řízené programování? Události (Event) řídí běh programu. Program je sestaven z jednotlivých komponent, které mohou být dle potřeby zobrazovány a během své existence mohou generovat různé události. Program není řízen sledem příkazů (od prvního k poslednímu), ale je vlastně řízen smyčkou obsluhující frontu událostí. Na komponenty jsou navázáni posluchači (listener), registrující jednotlivé události. Obsluha jednotlivých událostí (reakce na událost), tzv. obslužný kód (handler), je umístěn v jednotlivých metodách. Co je to komponenta? Většina používaných komponent je potomkem třídy javax.swing.jcomponent, která je potomkem java.awt.container. Rovněž je třeba si uvědomit, že existují jak editovatelné (interaktivní) komponenty, tak komponenty pouze informativní (uživatel nemůže měnit jejich obsah). Komponentou může být panel ovládání, kde máme několik ovládacích prvků, nebo může být čistě jen tlačítkem, labelem apod. Jaké jsou základní typy komponent? Komponenty zle rozdělit do tří základních kategorií dle úrovně: - Top-Level komponenty - JFrame, JDialog - Kontejnerové komponenty - slouží k seskupování komponent, které jsou do tohoto kontejneru umístěny. Jedná se o JPanel, JScrollPane, JToolbar, JSplitPane a další - Základní komponenty (listy) Swing Controls (JButton, JLabel, JRadioButton, JCheckBox, JTextArea, JTextField, JScrollBar, JComboBox, JMenu, JList, JProgressBar, a další) Jakým způsobem se zobrazí hlavní okno aplikace? Nejjednodušší aplikace s GUI musí splnit pouze několik základních předpokladů a to vytvoření instance pro hlavní okno a jeho zobrazení. V následující ukázce je vytvořena aplikace (klasické okno se statickým textem), která po svém spuštění v metodě main: - Vytvoří instanci hlavniokno třídy JFrame pro hlavní okno - Vytvoří instanci statickytext třídy JLabel pro nápis, který se bude zobrazovat na ploše hlavního okna - Instanci statickytext vloží do kontejneru hlavního okna (hlavní okno se stává jeho vlastníkem a zabezpečuje jeho zobrazení) - Pro hlavní okno se nastaví chování při pokusu o jeho uzavření - Provede se implicitní nastavení rozměrů okna dle jeho obsahu - Zobrazí se hlavní okno aplikace Jak se vloží komponenty do kontejneru kontejnerové aplikace? Buď přes paletový editor v NetBeans, nebo natvrdo v kódu pomocí metody getcontentpane().add(); Jakým způsobem se řeší odezva na událost? Události vytváří uživatel (prostřednictvím ovládací komponenty), nebo program nebo systém. Z hlediska programování je to objekt a jiný objekt tyto události zachycuje. Zachycovat může pouze objekt s implementovaným rozhraním Listener, kterého si vysílající objekt zaregistruje. Co je to posluchač a jak se registruje? Pomocí metody addactionlistener je tlačítku přidán posluchač. Tento posluchač při svém vytváření definuje handler actionperformed, což je metoda, která zabezpečí reakci na událost stisknutí tlačítka. Tato metoda nic neřeší, ale volá metodu ActionPerformed, která se postará o námi zadanou operaci (např. inkrementace počítadla)

2 Jaké jsou typy posluchačů? Co je nutno nastavit v kódu, aby bylo možno aplikaci korektně ukončit? Nastaví se přímo v konstruktoru MainFrame - setdefaultcloseoperation(jframe.exit_on_close); 02_Tvorba interaktivních grafických programů Jak se registruje událost u příslušné komponenty? K jednotlivým událostem vždy existuje tzv. posluchač (Listener), což je Třída, která implementuje příslušné rozhraní a tuto třídu je potřeba zaregistrovat u příslušné komponenty, jejíž určitou událost je třeba monitorovat. Jaký je rozdíl při registrování pomocí adaptéru a pomocí listeneru? Varianta Listener - V tomto případě je potřeba implementovat všechny metody rozhraní daného posluchače. To se jeví jako nevýhoda především tehdy, pokud registrujeme posluchače s více metodami v rozhraní a přitom plánujeme použít pouze některé z nich. Varianta Adapter - V tomto případě stačí implementovat pouze jednu nebo více požadovaných metod rozhraní daného posluchače. Třída MouseAdapter již implementovala všechny metody rozhraní (prázdné tělo). To je výhodné tehdy, pokud jako v tomto případě potřebujeme obsluhu pouze jedné události. Co je to rozhraní? GUI poskytované knihovnami jazyka Java je nezávislé na zařízení (tlačítko bude nebo může vypadat stejně na monitoru stolního PC i např. na tabletu bez ohledu na typu použité grafické karty) a rovněž s ohledem na multiplatformnost programovacího jazyka Java je nezávislé i na OS. Rozhraní je tvořeno tzv. komponentami, které jsou vizuální nebo nevizuální. Na základě existujících komponent si může programátor vytvořit vlastní komponenty s požadovanými vlastnostmi a požadovaným chováním. Jaké jsou události myši? - MouseEvent -reaguje na události stisku a uvolnění tlačítek myši, případně umístění kurzoru myši nad plochy komponenty - MouseMotionEvent - reaguje na události související s pohybem myši - MouseWheelEvent - reaguje na práci s kolečkem myši Jaké jsou události klávesnice? - isaltdown(), iscontroldown(), isshiftdown() - určují, zda v okamžiku události byly stisknuty klávesy Alt, Control nebo Shift Co je to událost, listener a obslužná metoda? Událost (Event) - řídí běh programu. Program je sestaven z jednotlivých komponent, které mohou být dle potřeby zobrazovány a během své existence mohou generovat různé události Listener (posluchač) zachycuje události, jako MouseEvent, MouseWhellEvent, MouseMotionEvent a spoustu dalších událostí Obslužná metoda Pokud listener zachytí nějakou událost, tak se dle parametrů dané události, např. pokud bylo stisknuto levé tlačítko myši, tak se spustí obslužná metoda, která vykreslí např. čtverec Jaké údaje obsahuje parametr u obslužných metod pro události myši? Jednotlivé obslužné metody mají jeden parametr, jehož typ se liší podle typu posluchače. Pro události myši MouseEevent a MouseMotionEvent je použit typ parametru MouseEvent, případně pro MouseWheelEvent je to parametr typu WheelEvent. Tento parametr obsahuje důležité informace o poloze myši, kde se událost stala, stisknutém tlačítku které událost vyvolalo, případně o směru otočení rolovacího kolečka. Jak se rozlišuje tlačítko myši, které událost vyvolalo? Větvení je provedeno na základě návratové hodnoty metody getbutton(), která může nabývat hodnot MouseEvent.BUTTON1 (levé tlačítko), MouseEvent.BUTTON2 (střední tlačítko) nebo MouseEvent.BUTTON3 (pravé tlačítko).

3 Jak se kontrolují současně další stisknutá tlačítka? Například při události tažení nelze kontrolovat tlačítko myši pomocí metody getbutton(), neboť toto tlačítko nevyvolalo událost tažení. Kontrola je řešena pomocí metody getmodifiersex(), v jejíž návratové hodnotě jsou zkombinovány bitové příznaky všech aktuálně stisknutých tlačítek myši. Jak fungují operátory bitového součtu a součinu? Jaké jsou základní 2D grafické primitivy? 03_Rasterizace liniových objektů Mezi liniové primitivy patří úsečka, lomená čára, obrys mnohoúhelníku, kružnice a elipsa (obecně kuželosečky), oblouky (části kuželoseček) a otevřená nebo uzavřená obecná křivka. Mezi plošné primitivy patří mnohoúhelník, kruh (obecně plocha ohraničená kuželosečkou). Jaký je rozdíl mezi výstupem na vektorovém a rastrovém zařízení? Obraz (výstup) na rastrovém zařízení je tvořen jednotlivými obrazovými body (pixely). Vektorový popis úsečky pouze určuje její krajní body, nikoliv seznam všech bodů (pixelů), tyto krajní body se propojují křivkami a čárami. K čemu slouží rasterizační algoritmy? Tyto algoritmy obecně řeší převod mezi vektorovým zadáním obrazu a jeho rastrovou reprezentací. Úkolem rastrových algoritmů je určení všech pixelů, které budou tvořit obraz dané primitivy na výstupním rastrovém zařízení. Jaké znáte způsoby pro rasterizaci úsečky, kružnice, elipsy. - Úsečka - DDA algoritmus, Bresenhamův algoritmus - Kružnice - Bresenhamův algoritmus - Elipsa - Bresenhamův algoritmus Jak fungují jednotlivé popsané algoritmy? Kolikrát lze v rámci symetrie využít rasterizovanou část kružnice a elipsy? Kružnici 3krát a elipsu 7krát. V čem je výhoda celočíselných algoritmů. Jaký je rozdíl mezi čtyřspojitou a osmispojitou rasterizací? Pro čtyřspojité algoritmy platí podmínka, že každé dva po sobě následující pixely sousední musí mít společnou některou stranu pixelu. Jinak řečeno na sousední pixel je možno se dostat jedním ze čtyř směrů: vlevo, vpravo, nehodu nebo dolů. Pro osmispojité algoritmy platí, že za sousední pixel je považován ten, na který je možno se přesunout v horizontálním směru (vlevo, vpravo) nebo vertikálním směru (nahoru, dolů) nebo v některém ze čtyř diagonálních směrů. To v konečném důsledku znamená, že v osmispojité rasterizaci jsou za sousední pixely považovány ty pixely, které spolu sousední buď některou stranou, nebo některým rohem. Jakým způsobem se rasterizují liniové objekty se vzorem? Co je to antialiasing? Metoda zahrnující vizuální odstranění zubatosti čar vyhlazení hran. Jaké jsou základní 2D plošné grafické primitivy? Mnohoúhelník a kruh 04_Algoritmy vyplňování

4 Jak je definována oblast? Lze definovat oblast (area) jako uzavřenou část plochy, která je charakterizována především svým okrajem (hranicí). Oblast může, ale také nemusí být konvexní. Součástí hranice oblasti pro potřeby vyplňování se mohou stát i okraje zobrazované plochy (okna). Úplná definice oblasti zahrnuje: - samotnou definici hranice, - způsob vykreslení hranice, - způsob vykreslení vnitřních bodů oblasti, - vztažný bod pro počátek výplně, který bude použit při složitějším způsobu vyplňování, např. vzorem, šrafováním nebo texturou. Jaké jsou možnosti vyplnění oblasti? - Výplň jednou určenou barvou, tzv. jednolité souvislé vyplnění (Solid Fill) - Aplikování barevného přechodu dvou nebo více barev (Gradient Fill, Multi-Color Gradient Fill) - Šrafování oblasti (Hatch Fill) pravidelným nebo nepravidelným opakováním dvou nebo více barev - Opakovaným nanášením zadaného vzoru (Pattern Fill) - Texturové vyplnění, kdy je pro nastavení bravy na vnitřních bodech použit vybraný rastrový obrázek (Texture/Picture Fill) Jaký je rozdíl mezi rastrově a vektorově definovanou oblastí? Jak je ohraničená čtyřspojitá a osmispojitá oblast? 4-spojitá oblast je tvořena jednotlivými vnitřními body, přičemž mezi libovolnými dvěmi existuje cesta složená z vodorovných a svislých kroků po vnitřních bodech této oblasti. Je ohraničena 8 spojitou hranicí. 8-spojitá oblast je tvořena jednotlivými vnitřními body, přičemž mezi libovolnými dvěmi existuje cesta složená z vodorovných a svislých a diagonálních kroků po vnitřních bodech této oblasti. Je ohraničena 4 spojitou hranicí. Co je to rekurzivní algoritmus? Jaké jsou způsoby pro vyplnění vektorově definované oblasti? Pomocí řádkového vyplňování - Krok 1 Odstranění vodorovných hran - Krok 2 Orientace a zkrácení zbývajících hran - Krok 3 Průchod přes všechny řádky - Krok 4 Nalezení průsečíků - Krok 5 Zobrazení vnitřních bodů na řádku Jak se řeší vyplnění pomocí šrafování? Šrafování oblasti (Hatch Fill) pravidelným nebo nepravidelným opakováním dvou nebo více barev. Při šrafování lze použít uvedený algoritmus řádkového vyplňování, rozšířený o střídání vyplňovaných a nevyplňovaných řádků. - Volbou kroku lze volit šířku šrafování - Lze střídat více barev - Lze řešit horizontální barevný přechod Jaká je úprava algoritmu pro šrafování pod libovolným úhlem? Nejdříve se obraz otočí tak, aby šrafování probíhalo vodorovně (jako řádky) a po dokončení šrafování se obraz vrátí zpět do své původní polohy. Jaký je algoritmus inverzního vyplňování? Použití režimu XOR, při kreslení v tomto režimu je výsledný pixel kombinací podkladu a kresleného obrazu. Opakovaným nakreslením stejného motivu vznikne původní podklad. Plotové - Stejný princip kreslení úseček z jednotlivých bodů každé hraniční úsečky v režimu XOR. Úsečky se nekreslí až k okraji, ale směrem k 'plotu'. 'Plot' se volí jako svislice procházející některým uzlem hranice (nejlépe uzel, jehož x-ová souřadnice leží nejblíže středu oblasti). Výhoda: rychlejší, menší zbytečně pokreslená plocha

5 05_Algoritmy ořezávání a testování polohy Jaký je důvod k využívání ořezávacích algoritmů? Při potřebě zobrazení jakéhokoliv objektu na zobrazovací plochu jsou zasílány požadavky na zobrazení prostřednictvím jednotlivých grafických příkazů grafickému procesoru, který vytváří jejich obraz v grafické paměti a následně je obsah grafické paměti přenesen na výstupní zařízení. V rámci celého procesu zobrazení jsou ty části obrazu, které přesahují skutečnou zobrazovací oblast daného zařízení, odstraněny (oříznuty). Nemá totiž žádný smysl pokoušet se zobrazit části obrazu, které nemohou být díky např. velikosti zobrazovací plochy daného výstupního zařízení fyzicky zobrazeny. Snaha o včasné použití ořezávacích algoritmů je motivována především úsporou času, neboť každé následné zpracování zbytečných údajů je naprosto zbytečné (např. rasterizace celé úsečky, pokud její velká část leží mimo zobrazovací oblast). Co je to ořezávací oblast? Obvykle je viditelnou (ořezávací) oblastí osově orientovaný pravoúhelník (většinou okno souřadnicového systému zařízení). Jak se zjišťuje poloha bodu vzhledem k jednotlivým typům oblastí? Pro nekonvexní mnohoúhelník je třeba vyhodnotit počet průsečíků polopřímky vedené z vyšetřovaného bodu P libovolným směrem s hranami mnohoúhelníku. Pravidlo pro určení polohy: - Sudý počet průsečíků znamená, že bod leží vně - Lichý počet průsečíků znamená, že bod leží uvnitř Jak fungují jednotlivé uvedené algoritmy pro ořez úsečky? Metoda Cohen-Sutherland - Metoda je použitelná pro ořezání úsečky pravoúhlou oblastí, jejíž strany jsou rovnoběžné s osami SS. Je založena na rozdělení celé plochy USS na jednotlivé oblasti. Těmto oblastem je přiřazen 4-bitový kód podle polohy vzhledem k poloze ořezávací oblasti (vlevo, vpravo, dole, nahoře). Pro každý počáteční (Z) a koncový (K) bod úsečky se určí kód. Metoda Cyrus-Beck - Tato metoda je zobecněním metody Liang-Barsky a je určená k ořezání úsečky libovolným konvexním mnohoúhelníkem. Je založena na parametrickém vyjádření úsečky. Počet ořezů, které je třeba vykonat, závisí na zvoleném pořadí řezacích hran. Ořezání úsečky (Liang-Barsky) - Založeno na parametrickém vyjádření úsečky. Minimalizuje počet zbytečně určených nových hraničních bodů. Ořezávání pravoúhelníkem, jehož hrany jsou rovnoběžné s osami SS. Zobecnění pro obecný konvexní mnohoúhelník metoda Cyrus-Beck. Jaký je systém pro vytváření kódů jednotlivých segmentů ořezávací oblasti u algoritmu Cohen- Shuterland? Pro každý počáteční (Z) a koncový (K) bod úsečky se určí kód. - kód(z)sjednocení kód(k) = 0 úsečka je celá uvnitř - kód(z)průnik kód(k) 0 úsečka je celá mimo - kód(z)průnik kód(k) = 0 úsečka prochází více oblastmi, je třeba ji oříznout (ořezávání se provádí dle libovolné jedničky v kódech pro Z a K a testy s novými kódy se zopakují). Z jakého vyjádření úsečky vychází algoritmus Cyrus-Beck? Založeno na parametrickém vyjádření úsečky. - P(t)=A + t (B-A) - Px(t) = Ax + t(bx - Ax) - Py(t) = Ay + t(by - Ay) Jaké jsou výhody algoritmu Liang-Barsky oproti algoritmu Cohen-Shuterland? Minimalizuje počet zbytečně určených nových hraničních bodů. Jednoznačně určí hraniční body a nemusí se provádět zbytečné kroky výpočtů, abychom zjistili, jestli se dá oříznout a co ne.

6 06_Transformace 2D Jaké jsou základní 2D grafické lineární transformace? Mezi základní lineární transformace patří: - posunutí - otočení - změna měřítka - zrcadlení - zkosení Co je to transformační matice? Transformační matice charakterizuje konkrétní transformaci. Jaký je vztah mezi transformačním a explicitním vyjádřením transformací? Co je to inverzní transformace? Jedná se o opačnou transformaci Kdy ji lze provést? Pokud chceme otočit, posunout, zkosit objekty (obrázek, křivka apod.) Jak se realizuje složená transformace? Postupné aplikování jednotlivých transformací na bod P. Záleží na pořadí, pro skládání transformací NEPLATÍ komutativní zákon. Vyjádření jedinou maticí, kterou dostaneme postupným násobením matic, představujících jednotlivé částečné transformace. Jaký je rozdíl mezi transformací vektorového a rastrového obrázku? Vektorová grafika transformace se aplikuje na všechny (řídící) body (vrcholy) daného objektu Rastrová grafika transformace se aplikuje na všechny pixely rastru Jak se řeší symetrie pomocí transformací? Zvláštní případ změny měřítka (symetry). Absolutní hodnota koeficientů je rovna jedné. Souměrnost osová a středová. Používají se výrazy překlopení, zrcadlení (reflection, flip, mirror). Jak se řeší otočení okolo libovolného bodu v rovině? Otočení okolo obecného bodu R[XR, YR] lze řešit složenou transformací: posunutí otočení zpětné posunutí. Jaký rozměr má transformační matice ve 2D? Jaké je vyžití křivek v počítačové grafice? 07_Křivky 2D Křivka je jedna ze základních grafických primitiv, jenž má uplatnění v mnoha oblastech jak 2D tak i 3D grafiky. Velký význam mají křivky například při definování trajektorie, která je následně použita pro pohybovou animaci jiného objektu. Co je to aproximační a interpolační křivka? - Interpolační křivky prochází zadanými řídícími body - Aproximační křivky nemusí procházet zadanými řídícími body, snaží se je co nejlépe vystihnout Co je to polynomiální funkce, polynom k-tého stupně? Interpolační křivky musí procházet všemi svými řídícími (opěrnými) body. Pro křivku n-tého řádu musí být známo n+1 bodů. Základním problémem je při znalosti dotyčných n+1 bodů nalezení takové křivky, která danými body prochází. Danou úlohu je možno řešit nalezením polynomiální funkce F(x) daného stupně n, která v zadaných bodech x0<x1< xn-1<xn nabývá hodnot F(x0)=y0, F(x1)=y1,,F(xn)=yn

7 Co je to spojitost křivek? Navazování probíhá v koncových (krajních) bodech dvou křivek. Tyto body jsou označovány jako uzly. Samotné napojení dvou křivek (jednoduchá spojitost C0) není zárukou hladkého napojení. Existuje několik klasifikací napojení (spojitosti, kontinuity): - C0: spojité napojení, koncový bod první a počáteční bod druhé křivky jsou totožné - C1: tečné vektory obou křivek jsou si v daném uzlu rovny - C2: první derivace tečných vektorů jsou si rovny Jaký je rozdíl mezi C a G spojitostí? Kromě konstrukční spojitosti (C) je definována ještě spojitost G (grafická), která je v některých stupních méně přísná. - G0 počáteční a koncový bod je totožný - G1 stačí, aby tečné vektory byly lineárně závislé Jaký je význam jednotlivých stupňů spojitosti? Určují, jak jsou křivky, vzhledem ke svým počátečním a koncovým bodům, na sebe spojité. K čemu slouží Lagrangeův polynom? Slouží pro nalezení polynomiální funkce. Při větším počtu bodů (vyšší stupeň polynomu) je nevýhodou značné rozkmitání křivky u krajních bodů. Co je to spline křivka? Výsledná interpolace je po částech spojitá. Vhodné i pro vyšší počet bodů. Splajnová křivka vykazuje nižší zvlnění, než polynom n-tého stupně. Změna polohy jednoho řídícího bodu neovlivní celou křivku, ale jen okolí daného řídícího bodu. Jaký je vliv stupně polynomiální křivky na její průběh? Čím větší stupeň, tím se její průběh více rozkmitá. Jaký je postup k nalezení polynomiální funkce pro aproximační křivku? 08_Prostorová grafika a modelování těles Na jakých principech je založena prostorová grafika? 3D vektorová grafika je ve svém základu postavena na obdobných principech jako rovinná vektorová grafika. Jediný rozdíl je přidání třetího rozměru, který je realizován třetí osou (označovanou jako osa z). Každý bod je popsán trojicí reálných souřadnic, to znamená, že definice bodu P v prostoru má tvar P[x, y, z]. Co je to modelování? Modelování v 3D grafice je proces, pomocí něhož vytváříme trojrozměrný model prostorového tělesa (případně skupiny těles) z reálného světa. Tento model popisuje tvar a polohu prostorových objektů za pomoci datových struktur a algoritmů pro vytváření a následnou manipulaci s 3D objekty. Jaké jsou základní způsoby modelování? K popisu modelu lze použít několik různých způsobů (typů modelů), přičemž každý způsob má své výhody a nevýhody. Některé způsoby jsou např. vhodnější na definování modelů, u kterých budou často probíhat objemové výpočty, jiné jsou úspornější z hlediska paměťové náročnosti. - Hranové - Objemové - Povrchové Jak je popsáno těleso v hranovém modelu? Popsáno pomocí vrcholů a hran Jaké jsou výhody a nevýhody objemového modelování? - Výhody přesně určuje model, čímž získáme představu o tom, jak takový model vypadá - Nevýhody velká paměťová náročnost

8 Co je to voxel? Model je založen na elementární objemové jednotce, tzv. voxelu (Volume Element). Je to prostorový ekvivalent pixelu, který je používán v rastrové rovinné grafice. Obdobně jako je 2D rastrový obraz složen z pixelů, jejichž počet určuje velikost obrázku, je celý popisovaný 3D prostor složen z jednotlivých voxelů, které mají tvar krychle. Jaké znáte způsoby reprezentace voxelů při objemovém modelování? Voxel reprezentuje barevnou informaci, ale především určuje, zda prostor jím ohraničeným je nebo není součástí modelovaného tělesa. Která tělesa je vhodné modelovat pomocí šablonování? Jedná se především o tělesa, která jsou symetrická okolo vlastní osy a šablonu tvoří liniový útvar (křivka) nebo je realizováno pomocí tažení (Sweep) plošného útvaru po definované trajektorii (křivka). Co je CSG modelování? Konstruktivní geometrie těles (Constructive Solid Geometry). Reprezentace těles pomocí stromu složeného z CSG primitiv (kvádr, koule, válec, kužel, poloprostor, toroid), množinových operací (sjednocení, rozdíl, průnik) a transformací. Jaké jsou základní prvky CSG modelování? - CSG primitivy - kvádr, koule, válec, kužel, poloprostor, toroid - Množinové operace - sjednocení, rozdíl, průnik - Transformace - otočení, posunutí, změna měřítka, a další Jaké jsou výhody povrchového modelování? Výhodou je možnost precizního popsání těles se složitým povrchem. Jemnost modelu (zachycení požadovaných detailů) je možno řešit lokálně v požadovaných částech modelu dalším přidáváním dalších definičních bodů. K čemu slouží transformace? 09_Transformace 3D Základním cílem jednotlivých transformací je změna polohy nebo tvaru daného tělesa. Jaký je rozdíl mezi 2D a 3D transformacemi? Pro transformace v prostoru platí obecně obdobné principy týkajícího se transformací v rovině. Základním cílem jednotlivých transformací je změna polohy nebo tvaru daného tělesa. Při transformacích v prostoru má kromě již zmíněných transformací smysl hovořit navíc i o transformaci projekce, což je změna třísložkových prostorových souřadnic na rovinné dvousložkové souřadnice, které je nutno znát v případě zobrazení daného tělesa pomocí dvourozměrného zobrazovacího zařízení (monitor, tiskárna). Jaký je vztah mezi explicitním a maticovým vyjádřením transformace? V případě explicitních vztahů je popsána úprava souřadnic bodu P[x, y, z] pomocí tří samostatných vztahů na souřadnice bodu P [x, y, z]. Některé transformace (např. posunutí) lze provádět postupně po složkách x, y, z, obecně však platí, že - x = f(x, y, z) - y = f(x, y, z) - z = f(x, y, z) V tomto případě je nutno při implementaci zabezpečit, aby výpočty všech transformovaných souřadnic probíhaly na základě původních souřadnic. Souřadnice bodu P = [x, y, z] se vlivem transformace upraví na P = [x, y, z ] Maticové vyjádření lze zapsat, stejně jako v 2D grafice, pomocí řádkového nebo sloupcového vektoru souřadnic a příslušné transformační matice A, jejíž prvky odpovídají koeficientům z explicitních transformačních vztahů.

9 Co je to transformační matice? Maticové vyjádření lze zapsat, stejně jako v 2D grafice, pomocí řádkového nebo sloupcového vektoru souřadnic a příslušné transformační matice A, jejíž prvky odpovídají koeficientům z explicitních transformačních vztahů. Vzhledem k tomu, že v některých transformačních vztazích (např. posunutí) je kromě členů, týkajících se souřadnic x, y a z, uveden i čtvrtý člen, je nutno pro jednotný maticový výpočet používat čtvercovou matici o rozměru (n+1) x (n+1). Konkrétně pro 3D transformace je to 4 x 4. Co je to homogenizační faktor? Z důvodu možnosti provádění maticových operací je nutno rozšířit i vektor souřadnic o jednu souřadnici. Tento uměle doplněný prvek vektoru bývá označen jako souřadnice w. Hodnota w je nastavena na 1, případně pro jinou hodnotu jsou původní souřadnice upraveny vynásobením nebo vydělením hodnotou w. Jak probíhá provedení složené transformace? Tuto specifickou transformaci je možno realizovat složenou transformací, která se skládá z posunutí transformovaného objektu tak, aby osa otáčení byla totožná s některou z os souřadnicového systému, samotného otočení a zpětného posunutí. Pomocí jaké transformace je řešena symetrie? Symetrie je specifickým případem transformace změny měřítka, kdy příslušné koeficienty jsou nastaveny na hodnotu -1. Lze realizovat souměrnost dle středu souměrnosti (bod), osy souměrnosti (přímka) a roviny souměrnosti. Vzhledem k jakému prvku je realizována transformace otočení ve 3D? Při 3D transformaci otočení je třeba rozlišovat několik základních možností otáčení. Obecně platí, že na rozdíl od 2D grafiky, kde bylo otáčení vztaženo k bodu (středu) otáčení, zde je otáčení vztaženo k přímce (ose) otáčení. Otáčení je možno realizovat obecně k jakékoliv přímce v prostoru nebo je možno realizovat specifické otáčení kdy osou otáčení je některá z os souřadnicového systému, případně přímka, která je rovnoběžná s některou z os souřadnicového systému. Jaké jsou užívány 3D souřadnicové systémy? - Levotočivý systém (Right-handed) - Osy (v pořadí x, y, z) jsou vzájemně orientovány proti směru hodinových ručiček. Osa x směřuje před průmětnu. - Pravotočivý (Left-handed) - Osy v (pořadí x, y, z) jsou vzájemně orientovány po směru hodinových ručiček. Osa y směřuje před průmětnu. Jaké jsou určující koeficienty pro jednotlivé transformace? K čemu slouží transformace projekce? 10_Zobrazování objektů 3D grafiky Promítání je možno chápat jako specifickou transformaci, při které dojde k převodu trojrozměrných souřadnic každého řídícího bodu modelovaného objektu na dvourozměrné souřadnice. Jaké znáte běžně používané typy projekce? Kolmé promítání Rovnoběžné promítání Středové promítání Co je to průmětna? Důležitým pojmem je promítací rovina (tzv. průmětna), což je plocha, na které se zobrazuje 2D obraz. Na průmětnu se pomocí tzv. promítacích paprsků, což jsou polopřímky, vycházející z místa pozorování (pozorovatele) a procházející jednotlivými body modelu, vytváří obraz těchto promítaných bodů. Které typy projekce umožňují zobrazení perspektivy? Rovnoběžné a Středové promítání

10 Jaká projekce se používá v technickém kreslení? Kolmé promítání - Je velmi přesné, nicméně pro běžné uživatele, kteří nejsou zvyklí na tento způsob zobrazení je problematicky čitelné. To je dáno především tím, že kolmé promítání neumožňuje vyjádření perspektivy. Obraz je složen ze tří pohledů - půdorysu, bokorysu a nárysu. Tyto obrazy jsou vytvořeny samostatně pomocí tří samostatných zobrazení na tři odlišné průmětny. Při tomto zobrazení jsou zachovány jak délky, tak i všechny úhly. Jaká projekce poskytuje realistické zobrazení rozsáhlejších scén? Středové promítání - Toto promítání umožňuje zobrazení perspektivy tak, jak je to pro vnímání lidským okem přirozené. Všechny paprsky vychází (resp. se sbíhají) v jednom bodě, který se označuje jako ohnisko. Je určeno pro realistické zobrazení větších objektů. Je určeno průmětnou a středem promítání. Jaké znáte typy rovnoběžného promítání? Technická axonometrie Izometrie Dimetrie Trimetrie Ve kterých typech projekcí jsou zachovány délky a/nebo úhly? V kolmém promítání Co je to ohnisko a při jaké projekci se uplatní? Ohnisko je bod, ze kterého vychází/sbíhají všechny paprsky uplatní se u Středového promítání Co řeší algoritmy viditelnosti? Jednou z úloh, které je třeba při projekci řešit je tzv. viditelnost jednotlivých částí objektů zobrazované scény. Pokud jsou stěny definovány a mají býti zobrazeny, potom je potřeba jednotlivé stěny zobrazit při projekci jako rovinné útvary, které jsou zobrazeny pomocí svého okraje a určitým způsobem definované výplně. Výplň může být zobrazena nejčastěji jednolitou barvou nebo pomocí rastrového obrázku, tzv. textury. Ve většině případů, kdy je třeba stěny zobrazovat dojde k situaci, že stěna, která je k pozorovateli blíže zakrývá úplně nebo z části jinou stěnu nebo stěny. Obecně lze algoritmy viditelnosti rozdělit na: - algoritmy, řešící viditelnost v prostoru (v 3D datech scény) - algoritmy, řešící viditelnost až ve 2D obraze (na průmětně) 11_Metody snižování barevného prostoru Jak je definován rastrový obraz? Rastrový obraz je složen z pixelů, proto rastrový. Záleží, na jaké bitové hloubce leží, čím větší bitová hloubka, tím větší velikost obrázku apod. Co je to pixel a jakou nese informaci? Je základní jednotkou rastru, čím větší má obrázek rozlišení, tím má více pixelů. Pixel nese informaci o x-ové a y-ové souřadnici a také barevnou hloubku obrázku. Co je to barevná hloubka rastrového obrázku? Velikost barevného prostoru se označuje pojmem barevná hloubka. Pokud barevný prostor obsahuje pouze dvě barvy, potom každý pixel, mapovaný na některou z barev tohoto barevného prostoru, může zabírat v paměti prostor o velikosti pouze 1 bit. Pokud barevný prostor obsahuje maximálně 256 libovolných barev, potom každý pixel zabere při využití palety paměťový prostor o velikosti 1 Byte. A v případě, že barevný prostor obsahuje cca 16 milionů barev, potom bývá označen jako TrueColor a každý pixel mapující barvy tohoto barevného prostoru zabere v paměti místo o velikosti 3 Byte. Proč je někdy vhodné snižovat barevnou hloubku rastrového obrazu? Dále je nutno si uvědomit, že rastrový obrázek v režimu TrueColor, obsahující například barevnou fotografii, má možnost mít každý pixel nastaven na libovolnou barvu z příslušného barevného TrueColor prostoru, ovšem ve skutečnosti obsahuje podstatně méně různých barev, než je oněch 16 milionů. Dalším důvodem pro snížení barevného prostoru obrázku může být cílená (uživatelem řízená) příprava před publikováním daného obrázku na zařízení, které není schopno zobrazit daný obrázek v plném barevném rozsahu.

11 Jaké jsou k tomu určeny metody? Existuje mnoho metod, které jsou schopny snížit barevnou hloubku, to znamená omezit množství možných použitých barev u daného rastrového obrázku. Některé z těchto metod jsou schopné ušetřit paměťovou náročnost rastrového obrázku při zachování stávající kvality obrazu (případě při téměř neznatelném snížení kvality). Mezi základní metody patří např. převod plnobarevného obrázku na odstíny šedé, vytváření a použití palet, prahování, půltónování, rozptylování a další. Jaký je rozdíl mezi půltónováním a rozptylováním? Půltonování - Nahrazení vícebarevného pixelu několika pixely s omezenou barevností. Na základě odstínu (barvy) původního pixelu nahradíme tento. Pixel na výstupu skupinou menších bodů s použitím pouze (například) dvou barev. Zvyšuje se rozlišení na úkor barevné hloubky. Rozptylování - U této metody nedochází ke zvýšení počtu obrazových bodů. Princip a samotná implementace metody je velmi jednoduchá. Pro každý pixel se porovnává jeho jas (barva) s prahovou hodnotu. Ovšem na rozdíl od metody prahování je práh pro stanoven náhodně pro každý pixel zvlášť. Postup: - pro každý pixel upravovaného rastru se provede: - vygenerování náhodného čísla irand v rozsahu 0, imax), kde imax je maximální intenzita barevného rozsahu převáděného obrázku - pokud je intenzita daného pixelu ivst_pix > irand, potom ivýst_pix = 1 (resp. 255) - jinak ivýst_pix = 0 Jak funguje metoda distribuce chyby? Metoda s rozptylováním chyby se snaží tyto chyby (které v ostatních metodách jsou zanedbávány) korigovat a jas, o který byl daný pixel upraven (zvýšen nebo snížen), rozprostřít do ostatních okolních pixelů. Výpočet chyby: - chyba = ipuvodni iupraveny - ipuvodni je původní jas (barva) zpracovávaného pixelu - iupraveny je nově vypočtený jas (barva) zpracovávaného pixelu Chyba se přenáší na sousední dosud nezpracované pixely, dle daného schématu a naznačených směrů. Existuje několik variant (schémat) pro rozpočítání chyby na okolí. Jaká chyba vzniká? Při většině metod snižování barevného rozsahu, dochází k úpravám barvy (jasu) jednotlivých pixelů. Typickým příkladem je prahování (případně rozptylování) při změně z rozsahu 256 odstínu na 2 odstíny černou a bílou. Při tomto drastickém snížení barevného rozsahu je každý pixel, dle svého jasu převeden na pixel s jasem 0 (černá) nebo 255 (bílá). Ovšem barevným (jasovým) posunem libovolného pixelu dochází k posunu celého obrázku, především ale blízkého okolí upravovaného pixelu. Jak se aplikuje distribuční schéma? Co je to prahování? Jak se stanovuje práh? Tato implementačně nejjednodušší metoda vytváří obraz ve kterém jsou viditelné ostré přechody mezi jednotlivými použitými barvami. Při použití pouze dvou barev (typicky černá a bílá), se používá nejčastěji jako příprava na další zpracování obrazu (segmentace, vyhledávání objektů). Z pohledu zachování reálného obrazu dává nejhorší výsledky (pokud to není výtvarný záměr). Při použití této metody nedochází ke zvýšení počtu obrazových bodů. Postup: Pro celý obrázek se zvolí jedna prahová hodnota v rozsahu <0, imax>, kde imax je maximální intenzita barevného rozsahu převáděného obrázku. Nejčastěji se práh volí v polovině intervalu, pro každý pixel se provede: - pokud je intenzita daného pixelu ivst_pix > práh, potom ivýst_pix = 1 (resp. 255) - jinak ivýst_pix = 0

12 12_Úpravy rastrového obrázku Jaký je přístup k jednotlivým barevným kanálům v barvě? Barva pixelu je instance třídy Color. Pomocí jejích metod případně pomocí přístupu k jednotlivým bajtům pomocí operátoru SHR je možné získat hodnotu jednotlivých barevných kanálů R, G, B a A. Kanál A představuje průhlednost dané barvy. Color c = new Color (255, 0, 128); int r = c.getred(); int g = c.getgreen(); int b = c.getblue(); String rgb = Integer.toHexString(c.getRGB()); rgb = rgb.substring(2, rgb.length()); int i = c.getrgb(); // v hexa AARRGGB // AA standardně nastaveno na 0xFF r = (i & 0xFF0000) >> 16; g = (i & 0xFF00) >> 8; b = i & 0xFF; Jak se realizují geometrické úpravy rastrového obrázku? Geometrické transformace u rastrového obrázku představují především jeho otočení. V případě otáčení dochází v podstatě k transformacím souřadnic jednotlivých pixelů. V případě otočení o úhel, který je násobkem 90, se jedná o bezeztrátový celočíselný algoritmus. To znamená, že originální i transformované souřadnice jsou celá čísla a operace je vratná beze ztráty jakékoliv informace. Jaký je rozdíl mezi dopředným a zpětným mapováním? - dopředné prochází se pixely původního rastru a určuje se barva a poloha pixelu ve výsledném rastru - zpětné pro pixely výsledného rastru se hledají odpovídající pixely v původním rastru (většinou reálná hodnota). Vybranou metodou (volba se promítne do kvality) se určí barva výsledného pixel dle sousedů původním rastru. Jakým způsobem se řeší vzniklé díry při geometrických transformacích? Při dopředném otáčení vznikají díry, které je potřeba nalézt a určit jejich barvu z vyplněných sousedů. Jaké metody znáte pro úpravu velikosti rastrového obrázku? Interpolace nejbližším sousedem Lineární interpolace Kubická interpolace Co je to histogram? Určuje četnost pixelů s jednotlivými hodnotami jas. U obrazů s odstíny šedé má jeden rozměr, u barevných obrazů 3 rozměry. Úpravou histogramu lze měnit vzhled obrazu. Využívá se při GAMA korekci. Mezi používané funkce patří: prahování, zrovnoměrnění, roztažení Jaký je rozdíl mezi histogramem barevného obrázku a obrázku v odstínech šedé? U obrazů s odstíny šedé má jeden rozměr, u barevných obrazů 3 rozměry. Jak se převádí barva na její jas? Převod na odstíny šedé představuje nejjednodušší způsob redukce barev v obraze. Realizuje se postupným přepočtem jasu všech pixelů. Jas pixelu lze vypočítat zprůměrováním hodnot v jednotlivých kanálech. Ovšem vzhledem k tomu, že lidské oko je různě citlivé na jednotlivé barvy (nejvíce na zelenou) je mnohem vhodnější upravit váhy hodnot v jednotlivých kanálech. Jeden z doporučených vztahů je: jas = 0,299*r + 0,587*g + 0,114*b