4 Rasterizace liniových objektů



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

5 Algoritmy vyplňování 2D oblastí

11 Zobrazování objektů 3D grafiky

7 Transformace 2D. 7.1 Transformace objektů obecně. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

13 Barvy a úpravy rastrového

9 Prostorová grafika a modelování těles

Kreslení elipsy Andrej Podzimek 22. prosince 2005

2 Grafický výstup s využitím knihovny

Odvození středové rovnice kružnice se středem S [m; n] a o poloměru r. Bod X ležící na kružnici má souřadnice [x; y].

Geometrické transformace pomocí matic

obecná rovnice kružnice a x 2 b y 2 c x d y e=0 1. Napište rovnici kružnice, která má střed v počátku soustavy souřadnic a prochází bodem A[-3;2].

10. Analytická geometrie kuželoseček 1 bod

Fergusnova kubika, která je definována pomocí bodu P1, vektoru P1P2, bodu P3 a vektoru P3P4

12 Metody snižování barevného prostoru

MATURITNÍ TÉMATA Z MATEMATIKY

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

7.5.3 Hledání kružnic II

17 Kuželosečky a přímky

X = A + tu. Obr x = a 1 + tu 1 y = a 2 + tu 2, t R, y = kx + q, k, q R (6.1)

VZOROVÝ TEST PRO 3. ROČNÍK (3. A, 5. C)

Úvodní informace. 17. února 2018

Kapitola 5. Seznámíme se ze základními vlastnostmi elipsy, hyperboly a paraboly, které

Definice Tečna paraboly je přímka, která má s parabolou jediný společný bod,

3.6. ANALYTICKÁ GEOMETRIE PARABOLY

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

1.1 Napište středovou rovnici kružnice, která má střed v počátku soustavy souřadnic a prochází bodem

K OZA SE PASE NA POLOVINĚ ZAHRADY Zadání úlohy

2. Kinematika bodu a tělesa

, = , = , = , = Pokud primitivní funkci pro proměnnou nevidíme, pomůžeme si v tuto chvíli jednoduchou substitucí = +2 +1, =2 1 = 1 2 1

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

A[a 1 ; a 2 ; a 3 ] souřadnice bodu A v kartézské soustavě souřadnic O xyz

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

Základní vlastnosti křivek

Vyplňování souvislé oblasti

SEZNAM ANOTACÍ. CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT VY_32_INOVACE_MA4 Analytická geometrie

Michal Zamboj. January 4, 2018

ANALYTICKÁ GEOMETRIE HYPERBOLY

Grafická data jsou u 2D vektorové grafiky uložena ve voxelech NEPRAVDA Grafická data jsou u rastrové grafiky uložena v pixelech PRAVDA Grafická data

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

Definice globální minimum (absolutní minimum) v bodě A D f, jestliže X D f

Skládání různoběžných kmitů. Skládání kolmých kmitů. 1) harmonické kmity stejné frekvence :

PŘÍMKA A JEJÍ VYJÁDŘENÍ V ANALYTICKÉ GEOMETRII

KŘIVKY A PLOCHY. Obrázky (popř. slajdy) převzaty od

Transformujte diferenciální výraz x f x + y f do polárních souřadnic r a ϕ, které jsou definovány vztahy x = r cos ϕ a y = r sin ϕ.

Zavedeme-li souřadnicový systém {0, x, y, z}, pak můžeme křivku definovat pomocí vektorové funkce.

1. a) Určete parciální derivace prvního řádu funkce z = z(x, y) dané rovnicí z 3 3xy 8 = 0 v

Extrémy funkce dvou proměnných

Matematická analýza III.

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

KOMPLEXNÍ ČÍSLA INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ

Řešení 1b Máme najít body, v nichž má funkce (, ) vázané extrémy, případně vázané lokální extrémy s podmínkou (, )=0, je-li: (, )= +,

I. Diferenciální rovnice. 3. Rovnici y = x+y+1. převeďte vhodnou transformací na rovnici homogenní (vzniklou

Komplexní čísla a funkce

8.4. Shrnutí ke kapitolám 7 a 8

Zobrazování těles. problematika geometrického modelování. základní typy modelů. datové reprezentace modelů základní metody geometrického modelování

Analytická geometrie kvadratických útvarů v rovině

Analytická geometrie přímky, roviny (opakování středoškolské látky) = 0. Napište obecnou rovnici. 8. Jsou dány body A [ 2,3,

Michal Zamboj. December 23, 2016

III Určování hodnot funkcí sinus a cosinus

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

Matematika I, část I. Rovnici (1) nazýváme vektorovou rovnicí roviny ABC. Rovina ABC prochází bodem A a říkáme, že má zaměření u, v. X=A+r.u+s.

Analytická geometrie (AG)

CZ 1.07/1.1.32/

Příklady k analytické geometrii kružnice a vzájemná poloha kružnice a přímky

MATEMATIKA II - vybrané úlohy ze zkoušek (2015)

Kapitola 2. o a paprsek sil lze ztotožnit s osou x (obr.2.1). sil a velikost rovnou algebraickému součtu sil podle vztahu R = F i, (2.

9.1 Definice a rovnice kuželoseček

Funkce dvou a více proměnných

Jana Dannhoferová Ústav informatiky, PEF MZLU

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU

37. PARABOLA V ANALYTICKÉ GEOMETRII

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

MATEMATIKA II - vybrané úlohy ze zkoušek ( 2015)

Maturitní otázky z předmětu MATEMATIKA

Je založen na pojmu derivace funkce a její užití. Z předchozího studia je třeba si zopakovat a orientovat se v pojmech: funkce, D(f), g 2 : y =

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Systematizace a prohloubení učiva matematiky. Učebna s dataprojektorem, PC, grafický program, tabulkový procesor. Gymnázium Jiřího Ortena, Kutná Hora

Gymnázium, Brno, Elgartova 3

Q(y) dy = P(x) dx + C.

Obecný Hookeův zákon a rovinná napjatost

Otázku, kterými body prochází větev implicitní funkce řeší následující věta.

5. Statika poloha střediska sil

Okruhy problémů k teoretické části zkoušky Téma 1: Základní pojmy Stavební statiky a soustavy sil

5.3. Implicitní funkce a její derivace

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 7 III. Klíč 15 IV. Záznamový list 17

Rovnice přímek v rovině

Lekce 01 Úvod do algoritmizace

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

Cyklografie. Cyklický průmět bodu

Funkce a základní pojmy popisující jejich chování

ICT podporuje moderní způsoby výuky CZ.1.07/1.5.00/ Matematika analytická geometrie. Mgr. Pavel Liška

Občas se používá značení f x (x 0, y 0 ), resp. f y (x 0, y 0 ). Parciální derivace f. rovnoběžného s osou y a z:

4EK213 LINEÁRNÍ MODELY

Pedagogická poznámka: Celý obsah se za hodinu stihnout nedá. z ] leží na kulové ploše, právě když platí = r. Dosadíme vzorec pro vzdálenost:

Důkazy vybraných geometrických konstrukcí

6. DIFERENCIÁLNÍ POČET FUNKCE VÍCE PROMĚNNÝCH

Zimní semestr akademického roku 2014/ prosince 2014

1 Rozdělení mechaniky a její náplň

Průvodce studiem. do bodu B se snažíme najít nejkratší cestu. Ve firmách je snaha minimalizovat

Kapitola 8. prutu: rovnice paraboly z = k x 2 [m], k = z a x 2 a. [m 1 ], (8.1) = z b x 2 b. rovnice sklonu střednice prutu (tečna ke střednici)

Transkript:

4 Rasterizace liniových objektů Studijní cíl Tento blok je věnován základním algoritmům pro rasterizaci liniových (tzv. čárových) objektů, mezi které patří zejména úsečky, mnohoúhelníky, lomené čáry a dále křivky, kružnice, elipsy a kruhové a eliptické oblouky. V textu bude vysvětlena především motivace a důvod pro používání rasterizačních algoritmů. Dále budou představeny vybrané rasterizační algoritmy pro základní grafické primitivy a jejich implementace. Dále budou naznačeny způsoby řešení pro vykreslování tlustých a přerušovaných čar, vyhlazení zobrazení pomocí antialiasingu, případě vykreslování pouze části kružnice nebo elipsy. Doba nutná k nastudování 3 4 hodiny Průvodce studiem Při studiu tohoto bloku se předpokládá, že student je seznámen se základy analytické geometrie, zná základní vztahy pro vyjádření přímky, úsečky, kružnice a elipsy. 4.1 Rasterizace grafických primitiv Grafické primitivy 2D grafiky lze obecně rozdělit na liniové a plošné primitivy. 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. Obecně lze všechny liniové útvary definovat pomocí tzv. cesty (path), která může být tvořena posloupností bodů, které jsou propojeny úsečkami nebo tzv. kombinovanou čarou, která je tvořena posloupností navazujících úseček a křivek. Mezi plošné primitivy patří mnohoúhelník, kruh (obecně plocha ohraničená kuželosečkou). Speciálními případy jsou kruhová a eliptická výseč, mezikruží a další libovolný plošný útvar, jehož hranice je vymezena uzavřenou cestou (cestou, která začíná a končí v jednom a tomtéž bodě). K plošným objektům, které jsou popsány pomocí cesty, patří i vektorově definované znaky textu. KST/IPOGR 1 1 Petr Veselý

Každá konkrétní primitiva je popsána matematicky (tzv. vektorovým formátem), který má pro jednotlivé grafické primitivy různý tvar. Pro jednoduchost například úsečka může být určena svým počátečním a koncovým bodem nebo počátečním bodem a vektorem nebo rovnicí v parametrickém tvaru nebo několika dalšími způsoby. Všechny uvedené způsoby popisu úsečky definují (případně se z nich dá určit) ze kterého bodu do kterého bodu je třeba zobrazit čáru při potřebě danou úsečku zobrazit na výstupním zařízení. Při výstupu na vektorovém zařízení, což jsou dnes pouze speciální zařízení typu např. kreslící nebo řezací plotr je pro zařízení vydána posloupnost pokynů typu zvedni pisátko/řezací nůž přesuň hlavu na pozici počátečního bodu spusť pisátko/řezací nůž přesuň hlavu na pozici koncového bodu. Tím je na výstupu vytvořena spojitá čára nebo řez. Problém ovšem nastává v okamžiku, kdy je třeba realizovat výstup na rastrovém výstupním zařízení. A je nutno si uvědomit, že drtivá většina dnes používaných výstupních zařízení je rastrového charakteru (LCD monitory, běžné tiskárny). Obraz (výstup) na rastrovém zařízení je tvořen jednotlivými obrazovými body (pixely), viz předchozí blok. A samotný vektorový popis úsečky pouze určuje její krajní body, nikoliv seznam všech bodů (pixelů), z nichž má být rastrový obraz úsečky vytvořen. Tento problém řeší již zmíněné 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 je naznačeno na obr. 1. Obrázek 1: Vektorové a rastrové zobrazení úsečky KST/IPOGR 1 2 Petr Veselý

Mimo samotný matematický popis tvaru dané primitivy může být popis doplněn dalšími požadavky (atributy) pro definování barvy, tloušťky a stylu čáry. Pro plošné primitivy je třeba rozlišovat atributy pro obrys, který je vykreslován stejně jako liniová primitiva a atributy pro výplň vnitřku oblasti, které specifikují barvu a styl výplně. 4.2 Typ rasterizace Při převodu vektorově zadaného objektu na jeho rastrový obraz neexistuje jeden univerzální (správný) způsob pro definování množiny pixelů, které budou tvořit rastrový obraz daného objektu. Každý objekt může být rasterizován několika různými způsoby, které lépe či hůře odpovídají vektorovému zobrazení. Důležitou podmínkou pro korektní rasterizační algoritmus je zachování spojitosti daného objektu i po převodu na posloupnost pixelů. Jinými slovy objekt, který byl spojitý (např. úsečka) musí byt po rasterizaci znázorněn jako posloupnost pixelů, které spolu sousedí buď stranou, nebo rohem pixelu. Rasterizační algoritmy lze dle vytvářené spojitosti rozdělit na dvě základní kategorie čtyřspojité (4 connected) a osmispojité (8 connected) algoritmy. Rozdíl v rasterizaci úsečky je ukázán na obr. 2. 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ů. Obrázek 2: Osmispojitá a čtyřspojitá rasterizace úsečky KST/IPOGR 1 3 Petr Veselý

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. 4.3 Úsečka Úsečka je definována jako nejkratší spojnice dvou bodů. K jejímu určení jsou nejčastěji použity dva body, případně bod a vektor. K výpočtu reálných bodů ležících na úsečce, kterých je ovšem nekonečně mnoho (případně k ověření, zda zadaný bod leží či neleží na úsečce), zle využít některou z forem rovnice přímky. Nejčastěji jsou k vyjádření přímky použity Obecná rovnice přímky ax + by + c = 0, kde parametry a a b jsou složky normálového vektoru úsečky, která je určena body [x1, y1] a [x2, y2]. Parametr c je dopočítán po dosazení libovolného bodu ležícího na dané přímce do rovnice přímky. Směrnicové vyjádření přímky y = kx + q, kde y2 - y1 k =, x2 - x1 q = x2 y1- x1y x2 - x1 2 Vzhledem ke jmenovateli x2 x1 je zřejmé, že tímto způsobem nelze vyjádřit přímku rovnoběžnou s osou y. Parametrické vyjádření přímky x = x1 + ( x2 x1) t, kde pro přímku platí t,, pro úsečku t 0, 1 y = y1 + ( y2 y1) t Způsob pro vyjádření přímky (úsečky) je většinou volen dle potřeb dalšího zpracování případně výpočtů. Je důležité si uvědomit, že přímky rovnoběžné s osou y nelze například pomocí směrnicového tvaru vyjádřit. Tuto skutečnost je třeba při dalším zpracování úseček zohlednit (např. samostatnou logickou větví v příslušném algoritmu) KST/IPOGR 1 4 Petr Veselý

Rasterizace úsečky spočívá, jak již bylo zaznačeno v kapitole 4.1, v nalezení množiny pixelů, které nejlépe vystihují obraz reálné úsečky v rastru. Vzhledem k tomu že úsečka je základní grafickou primitivou, pomocí níž lze sestavit složitější vykreslované objekty, je důležité aby rasterizační algoritmy pro úsečky byly maximálně efektivní. Na první pohled by se mohlo zdát, že nejjednodušším způsobem pro výpočet pixelů úsečky je prosté postupné dosazování x ových hodnot z intervalu x1, x2 do obecné rovnice přímky, případně hodnot t z intervalu 0, 1 do parametrického vyjádření. Tento způsob rasterizace je ovšem naprosto nevhodný. Výpočet je velmi pomalý, neboť je prováděn v reálné aritmetice a je v něm použito násobení. Hlavní nevýhodou ovšem je problematické určení optimálního počtu pixelů, které vytvoří spojitý obraz. Počet určovaných pixelů přímo závisí na volbě výpočetního kroku Δx (případně Δt při použití parametrického vyjádření), přičemž počet kroků závisí na směrnici příslušné úsečky. 4.3.1 DDA Algoritmus Mezi jeden z nejstarších algoritmů pro rasterizaci úsečky patří DDA (Digital Differential Analyzer) algoritmus. Tento iterační algoritmus je založen opakovaném přičítání konstantních přírůstků k hodnotám na ose x i y. Počáteční hodnoty x a y odpovídá souřadnicím počátečního bodu úsečky. Základní varianta Předpokladem je, že úsečka je postupně rasterizována zleva doprava (x1 < x2). Pokud není splněna tato podmínka, je vzájemně zaměněn počáteční a koncový bod úsečky. (Poznámka: Úsečka je poté rasterizována a vykreslována směrem od jejího původního konce jejímu původnímu počátku, což může způsobit problémy například při kreslení několika navazujících úseček při použití například přerušované čáry). Dále je nutno si uvědomit význam směrnice úsečky. Směrnice úsečky vyjadřuje přírůstek na y ové ose (Δy) při změně x ové hodnoty o 1 (Δx = 1). Pokud je absolutní hodnota směrnice úsečky k 1, potom je za řídící osu považována osa y. Postupně je v cyklu opakovaně zvyšována hodnota na řídící ose (y) o jedničku a hodnota na ose x je změněna o hodnotu 1/k. KST/IPOGR 1 5 Petr Veselý

Pokud je absolutní hodnota směrnice úsečky k > 1, potom je za řídící osu považována osa x. Postupně je v cyklu opakovaně zvyšována hodnota na řídící ose (x) o jedničku a hodnota na ose y je změněna o hodnotu k. Na řídící ose lze počítat s celými čísly, na zbývající ose je nutno počítat s reálnými přírůstky. Vypočítané neceločíselné hodnoty souřadnic je třeba před vykreslením zaokrouhlením zaokrouhlit. Tato základní varianta vede při implementaci na více logických větví, které rozlišují řídící osu (x nebo y) a dále zda je splněna podmínka (x1 < x2), případně při řídící ose y zda je splněna podmínka (y1 < y2). Upravená varianta Tato varianta nerozlišuje směr úsečky (zleva doprava nebo naopak) a rovněž nestanovuje řídící osu. Podstatou je, že dle potřebného počtu kroků stanoví přírůstky na obou osách (přičemž na jedné z os je přírůstek roven reálné hodnotě 1.0). Zjednodušeně se dá postup naznačit následovně dx = x2 x1 dy = y2 y1 počet kroků = max ( dx, dy ) px = dx / počet kroků py = dy / počet kroků Dle počtu kroků opakuj iterační krok x i+1 = x i + px y i+1 = y i + py Vypočítané neceločíselné hodnoty souřadnic je opět třeba před vykreslením zaokrouhlením zaokrouhlit. Výhodou algoritmu je principiálně stejný přístup k hodnotám na obou osách, nevýhodou je nepatrně pomalejší výpočet díky reálným operacím na obou osách. public static void kresliuseckudda (Point z, Point k) { int dx = k.x - z.x; int dy = k.y - z.y; int pocetkroku = Math.max(Math.abs(dx), Math.abs(dy)); float px = (float)dx / pocetkroku; float py = (float)dy / pocetkroku; KST/IPOGR 1 6 Petr Veselý

} float x = z.x; float y = z.y; for (int index = 1; index <= pocetkroku; index++){ setpixel(math.round(x), Math.round(y)); x += px; y += py; } Příklad 3: DDA algoritmus 4.3.2 Bresenhamův algoritmus Bresenhamův algoritmus je mnohem efektivnější algoritmus než DDA. Jeho hlavní výhodou je, že dokáže rasterizovat úsečku pomocí celočíselné aritmetiky. Základní princip spočívá v tom, že při hledání jednotlivých obrazových bodů úsečky (pixelů) vždy rozhoduje, zda další obrazový bod úsečky bude ležet na stejné y ové souřadnici jako bod předchozí, nebo zda y ové souřadnici o jedničku větší. Předpokládejme, že známe umístění předchozího obrazového bodu úsečky (jako první bod se použije počáteční bod úsečky) se souřadnicemi [xi, yi]. Pro následující bod který má x ovou souřadnici xi+1 rozhodujeme o umístění na y ovou souřadnici yi nebo yi+1. Z rovnice přímky (po dosazení xi+1) získáme skutečnou souřadnici y na úsečce v bodě xi+1. Diference d1 a d2 představují chybu při použití jednoho z uvažovaných nově umístěných pixelů. y i +1 y d 2 d 1 y i x i x i +1 x i +2 Příklad 4: Princip Bresenhamova algoritmu KST/IPOGR 1 7 Petr Veselý

Dle rozdílu diferencí dokážeme určit, který pixel je blíže skutečné souřadnici. Při záporné hodnotě Δd bude mít nový další y ovou souřadnici yi, v opačném případě bude pixel umístěn na y ovou pozici yi+1. y = k (xi+1) + q d1= y yi = k (xi+1) + q yi d2= yi+1 y = yi+1 k (xi+1) q Δd = d1 d2 = 2k (xi+1) 2yi + 2q 1 Celý výpočet je vhodné převést do celočíselné aritmetiky (k=δy/δx, vynásobíme rovnici Δx) a rozhodovat pouze na základě znaménka. pi = ΔdΔx = 2 Δy xi 2 yi Δx + 2 Δy + Δx (2c 1) Hodnota pi je nazývána predikcí a bude určována iteračně (výpočet další hodnoty pi+1 na základě předchozí pi) během výpočtů všech dalších obrazových bodů úsečky. Hodnota 2 Δy + Δx (2c 1) je reálná konstanta, která po odečtení dvou následujících rovnic z výpočtu vypadne. Při výpočtu p1 na začátku výpočtu dosadíme x1, y1 a hodnotu q ze směrnicového vyjádření přímky a zaokrouhlíme. pi = 2 Δy xi 2 yi Δx + konst pi+1 = 2 Δy xi+1 2 yi+1 Δx + konst Odečtením rovnic za předpokladu že: xi+1 xi=1 dostaneme pi+1 = pi + 2 Δy 2 Δx (yi+1 yi) Podrobné odvození tohoto postupu je uvedeno v [2]. Praktický výpočet probíhá v jednom cyklu iteračním způsobem. Na počátku známe první bod úsečky [x1, y1] a určíme predikci p1. Při každém průchodu cyklem na základě předchozí hodnoty p určíme novou hodnotu predikce a rozhodneme o umístění následujícího pixelu na stejné y ové úrovni, jako měl předchozí pixel, případně o jeho posunutí o jednu úroveň výše. Rozhodovací logika výpočtu je zapsána pomocí následujících vztahů: KST/IPOGR 1 8 Petr Veselý

pokud (pi <= 0).. yi+1=yi; pokud (pi > 0).. yi+1=yi+1; pi+1 = pi + 2 Δy pi+1 = pi + 2 Δy 2 Δx 4.4 Kružnice Kružnice (případně kruhový oblouk) je další velice často používanou grafickou primitivou, proto i pro ni je důležitá existence rychlého rasterizačního algoritmu. Kružnici je možno definovat například středem [xs, ys] a poloměrem r nebo pomocí tří bodů ležících na kružnici [xa, ya], [xb, yb], [xc, yc]. Rovněž je možno k definici kružnice použít například obecnou nebo parametrickou rovnici. y y [x A, y A ] [x B, y B ] y s r y s [x C, y C ] x s x Parametrická rovnice kružnice x = r cos α y = r sin α x = xs + r cos α y = ys + r sin α Obecná rovnice kružnice F(x,y): x 2 + y 2 r 2 = 0 F(x,y): (x xs) 2 + (y ys) 2 r 2 = 0 Stejně jako bylo uvedeno u úsečky je možno primitivní metodu rasterizace kružnice založit na výpočtu některých bodů na základě rovnice kružnice. Tento postup má opět stejné nevýhody extrémní časová náročnost (reálná aritmetika, násobení, výpočet mocniny, goniometrické funkce) a především problematické určení potřebného počtu bodů (pixelů) pro vytvoření spojitého obrazu. Potřebný počet bodů je totiž závislý na poloměru kružnice, viz obr 6. KST/IPOGR 1 9 Petr Veselý

Jiný způsob rasterizace kružnice vychází z aproximace kružnice (kruhového obloku) lomenou čarou (mnohoúhelníkem). Tento způsob vykazuje při vhodně zvoleném počtu vrcholů dostatečnou přesnost při náhledovém či jiném nenáročném způsoby zobrazení. Obrázek 5: Počet potřebných pixelů kružnice závisí na poloměru 4.4.1 Bresenhamův algoritmus Bresenhamův algoritmus pro kružnici je opět celočíselný a princip je obdobný jako u úsečky. Základním požadavkem při použití tohoto algoritmu je umístění středu kružnice v počátku souřadnicového systému. Pokud rasterizujeme kružnici, jejíž střed je obecně v bodě [xs, yx], jsou vypočítané body před vykreslením posunuty do požadované polohy transformací posunutí (připočtením hodnot xs a ys k vypočítaným souřadnicím). y i y y-½ midpoint y i 1 x i x i +1 Příklad 6: Princip Bresenhamova algoritmu KST/IPOGR 1 10 Petr Veselý

Předpokládejme, že známe umístění předchozího obrazového bodu kružnice (jako první bod se použije bod kružnice s maximální y ovou souřadnicí [0, r]) se souřadnicemi [xi, yi]. Pro následující bod který má x ovou souřadnici xi+1 rozhodujeme o umístění na y ovou souřadnici yi nebo yi 1. Z rovnice kružnice získáme skutečnou souřadnici y na úsečce v bodě xi+1 a porovnáme ji s y ovou souřadnicí tzv. midpointu [xi+1, yi ½]. Znaménko v diferencích opět určuje chybu při použití jednoho z uvažovaných nově umístěných pixelů. Vychází se z rovnice F(x,y): x2 + y2 r = 0 Dosazením midpointu do základní rovnice kružnice dostaneme: pi = F(xi+1, yi ½) = (xi +1)2 + (yi ½)2 r2 Pokud predikce pi<0, potom jako další bude nakreslen bod se stejnou souřadnicí yi, jinak jako další bude nakreslen bod s y ovou souřadnicí yi 1. Iterační vyjádření predikce je pi+1 = pi + 2xi + 3 + (yi ½ )2 + (yi+1 ½)2 Praktický výpočet probíhá v jednom cyklu iteračním způsobem. Na počátku známe první bod kružnice [0, r] a určíme predikci p1 jako 1 r. Při každém průchodu cyklem na základě předchozí hodnoty p určíme novou hodnotu predikce a rozhodneme o umístění následujícího pixelu na stejné y ové úrovni, jako měl předchozí pixel, případně o jeho posunutí o jednu úroveň níže Rozhodovací logika výpočtu je zapsána pomocí následujících vztahů: pokud (pi <= 0),... yi+1=yi; pi+1 = pi + 2xi + 3 pokud (pi > 0),... yi+1=yi 1; pi+1 = pi + 2xi + 5 2yi Důležité upozornění Vše co bylo uvedeno při vysvětlování principů Bresenhamova algoritmu pro kružnici platí pouze pro jeden oktant (v pořadí 2. oktant, počítáno od kladné poloosy x proti směru hodinových ručiček). Při využití středové symetrie je možno celý výpočet rasterizace zjednodušit na výše uvedený výpočet bodů pouze v jednom oktantu a body do 7 zbývajících oktantů symetricky KST/IPOGR 1 11 Petr Veselý

zkopírovat. Úprava souřadnic (transformace symetrie) je na následujícím obrázku. V této souvislosti je třeba uvést podmínku, který zabezpečí ukončení iteračního výpočtu na hranici počítaného oktantu. Podmínka konce x>=y Příklad 7: Princip Bresenhamova algoritmu Následující kód demonstruje použití algoritmu. public static void kreslikruhbresenham (int sx, int sy, int polomer) { int predikce = 1-polomer; int x = 0; int y = polomer; while (x <= y) { setpixel(sx+x, sy+y); setpixel(sx-x, sy+y); setpixel(sx+x, sy-y); setpixel(sx-x, sy-y); setpixel(sx+y, sy+x); setpixel(sx-y, sy+x); setpixel(sx+y, sy-x); setpixel(sx-y, sy-x); KST/IPOGR 1 12 Petr Veselý

} } if (predikce <= 0) { predikce += 2*x + 3; //y zustava na stejne hodnote } else { predikce += 2*x + 5-2*y; //y klesa y--; } x++; Příklad 8: Kod Bresenhamova algoritmu 4.5 Elipsa Elipsu v základní poloze je možno definovat například středem [xs, ys] a délka poloos a, b. Rovněž je možno k definici kružnice použít například obecnou nebo parametrickou rovnici. U elipsy (obecně kuželosečky) je na rozdíl od kružnice třeba uvažovat i obecnou polohu. V tomto případě je možno elipsu definovat například středem [xs, ys] a body [xa, ya], [xb, yb], ležícími na poloosách nebo středem [xs, ys] a délkami poloos a, b a úhlem natočení hlavní poloosy vzhledem k ose x. Případně opět rovnicemi ve všeobecném tvaru. y y s b a y y s b a α y [x B, y s [x A, x s x x s x x s x Parametrická rovnice elipsy v základní poloze: x = a cos α y = b sin α x = xs + a cos α y = ys + b sin α Obecná rovnice elipsy v základní poloze: F(x,y): b 2 x 2 + a 2 y 2 a 2 b 2 = 0 F(x,y): b 2 (x xs) 2 + a 2 (y ys) 2 a 2 b 2 = 0 KST/IPOGR 1 13 Petr Veselý

Pro elipsu a její rasterizaci platí obecně většina zásad, které byly uvedeny v kapitole týkající se rasterizace kružnice. Dále bude uveden základní celočíselný algoritmus pro rasterizaci elipsy v základní poloze. Pro rasterizaci elipsy v obecné poloze lze rovněž použít celočíselné algoritmy, které jsou uvedeny v literatuře [3], případně zle tyto úlohy řešit pomocí transformace. 4.5.1 Bresenhamův algoritmus pro elipsu v základní poloze V tomto textu budou uvedeny jen zásadní rozdíly oproti rasterizace kružnice pomocí Bresenhamova algoritmu. Kompletní odvození je uvedeno v [3]. Výpočet je nutno provést pro jeden celý kvadrant. Během výpočtu v daném kvadrantu je třeba změnit řídící osy. Změna řídících os v bodě, kde je směrnice tečny = 1 (45 ). Tento bod je určen pomocí rovnosti parciálních derivací rovnice elipsy postupně podle x a podle y δf/δx = 2b2x δf/δy = 2a2y Počáteční nastavení predikce p1= b2 ba2 + a2/4; Rozhodovací logika výpočtu je zapsána pomocí následujících vztahů: pokud (pi <= 0),... yi+1=yi; pi+1 = pi + b2(2xi + 1) pokud (pi > 0),... yi+1=yi+1; pi+1 = pi + b2(2xi + 1) 2a2yi Pojmy k zapamatování Rasterizace, rasterizační algoritmus, iterační způsob výpočtu, predikce, celočíselný algoritmus, antialiasing, čtyř a osmispojitá rasterizace Otázky na procvičení 1. Jaké jsou základní 2D grafické primitivy? 2. Jaký je rozdíl mezi výstupem na vektorovém a rastrovém zařízení? 3. K čemu slouží rasterizační algoritmy? 4. Jaké znáte způsoby pro rasterizaci úsečky, kružnice, elipsy. KST/IPOGR 1 14 Petr Veselý

5. Jak fungují jednotlivé popsané algoritmy? 6. Kolikrát lze v rámci symetrie využít rasterizovanou část kružnice a elipsy? 7. V čem je výhoda celočíselných algoritmů. 8. Jaký je rozdíl mezi čtyřspojitou a osmispojitou rasterizací? 9. Jakým způsobem se rasterizují liniové objekty se vzorem? 10. Co je to anialiasing? Odkazy a další studijní prameny Žára, J., Beneš, B., Felkel, P. Moderní počítačová grafika. Computer Press, Brno, 1998. ISBN 80 7226 049 9. Foley, Van D. Computer Graphics. Principles and Practice. Addison Wesley,1991. KST/IPOGR 1 15 Petr Veselý