KRESLENÍ OBLASTÍ JANA ŠTANCLOVÁ jana.stanclova@ruk.cuni.cz Obrázky (popř. slajdy) převzaty od RNDr. Josef Pelikán, CSc., KSVI MFF UK
Obsah obsah definice oblastí a jejich vyplnĕní vyplňování oblasti s geometricky určenou hranicí vyplňování barvou vyplňování vzorkem šrafování vyplňování oblasti s hranicí v rastru jednoduché semínkové vyplňování řádkové semínkové vyplňování ořezávání objektů v rovině Cohen-Sutherlandův algoritmus 2/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Oblast oblast popis hranice oblasti vždy uzavřená popis hranice + způsob vyplnění popis hranice oblasti geometricky určená hranice posloupnost bodů definujících mnohoúhelník poslední vrchol = první vrchol → uzavřená oblast hranice nakreslená v rastru libovolný tvar hranice definice oblasti barva hranice / vnitřních bodů / bodů vně oblasti souřadnice jednoho vnitřního bodu oblasti 3/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Vyplnění oblasti vyplnění oblasti oblast se nevyplňuje kreslení hranice vyplnění všech vnitřních bodů jedinou barvou „solid fill“ šrafování oblasti „hatch fill“ obtížné pro hranice nakreslené v rastru opakované nanášení vzorku „pattern filling“ vzorek složen z jednoho nebo více barevných bodů 4/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
S GEOMETRICKY URČENOU HRANICÍ Oblast s geometricky určenou hranicí VYPLŇOVÁNÍ OBLASTI S GEOMETRICKY URČENOU HRANICÍ 5/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování vyplňování geometricky určené hranice pomyslná čára řádkem rastru průsečíky čáry s hranicí oblasti seřazení průsečíků podle x-ové souřadnice dvojice průsečíků → úsečky uvnitř oblasti y x [0,0] 6/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka sedmiúhelník A .. G hledání úseček shora dolů 7/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka Krok 1 první úsečka a její průsečíky → 4 hraniční úsečky BC, CD, EF, FG → nakreslení 2 úseček s nulovou délkou 8/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka Krok 2 druhá úsečka a její průsečíky → 4 hraniční úsečky BC, CD, EF, FG → nakreslení 2 úseček 9/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka Krok 3 třetí úsečka a její průsečíky → vyloučena vodorovná hrana DE → nekonečně průsečíků 10/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka Krok 4 čtvrtá úsečka a její průsečíky → problém: lichý počet průsečíků !! → problém: vrchol B → není lokální extrém hranice ve smyslu souřadnice y a neleží na vodorovné hraniční čáře 11/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka Krok 5 pátá úsečka a její průsečíky → nakreslení jediné úsečky 12/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové vyplňování mnohoúhelníka Řádkové vyplňování mnohoúhelníka Krok 6 šestá úsečka a její průsečíky → vyloučení vodorovné hrany GA → nakreslení jediné úsečky 13/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Úpravy hraničních úseček problém na 4. řádku ... ?? 14/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Úpravy hraničních úseček problém na 4. řádku řešení: zkrácení všech hran zdola o 1 pixel ve směru osy y → zdánlivé rozpojení uzavřené hranice 15/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Úpravy hraničních úseček problém na 4. řádku řešení: zkrácení všech hran zdola o 1 pixel ve směru osy y → zdánlivé rozpojení uzavřené hranice → systematické zkrácení hran → snížení počtu průsečíků jen 2 průsečíky problém vyřešen vodorovné hrany kresleny dodatečně 16/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Algoritmus vyplňování řádkovým rozkladem pro všechny hraniční úsečky úsečka vodorovná → vynechá se (případně se vykreslí) úprava orientace shora dolů zkrácení zdola o 1 pixel aktualizace mezní souřadnice celé hranice ymin a ymax pro y ∈ <ymin, ymax> nalezení průsečíků hraničních úseček s řádkem y uspořádání průsečíků podle x vykreslení úseků mezi lichými a sudými průsečíky vykreslení hranice oblasti (je-li třeba) 17/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Vyplňování oblasti vzorem zobecnění metody řádkového vyplňování → na úseky kladen barevný vzor barevný vzor obdélníková matice M např. 8 × 8 kreslení pixel nakresel podle předpisu PutPixel (x, y, M[y mod 8, x mod 8]) souřadnice barva (podle vzoru) 18/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti rozšíření metody řádkového vyplňování šrafování vodorovnými plnými čarami metoda řádkového vyplňování + změna kroku změny souřadnice y nekreslí se každý řádek (pro každé y), ale každý m-tý řádek 19/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti šrafování přerušovanými čarami šrafování s pevným začátkem optický jev: čárkování při pohledu z dálky vytváří siluetu silueta kopíruje levou hranici objektu šrafování vzhledem ke vztažnému bodu čárkování nanášeno relativně k určitému bodu např. počátek souřadnic umístění jednotlivých čárek nezávislé na tvaru a umístění oblasti oblast → výřez, kterým uživatel nahlíží na „nekonečný“ vzor na pozadí 20/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti šrafování pod obecným úhlem α vodorovné vyplňování + transformace otáčení postup otočení hraničních úseček o úhel α na upravenou hranici použit algoritmus vodorovného šrafování kreslen každý m-tý řádek vypočítané vnitřní úseky před vykreslením otočeny o úhel -α 21/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
(pro výpočet šrafování) Šrafování oblasti šrafování pod obecným úhlem α vykreslený vyšrafovaný objekt otočení zpět o úhel -α otočený objekt (pro výpočet šrafování) 22/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti opakované šrafování oblasti pod různými úhly → vytvoření složitějších vzorů šrafování obdélníka přerušovanými čarami pod třemi různými úhly?? 0º (vodorovné šrafování) 60º 120º 23/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti opakované šrafování oblasti pod různými úhly → vytvoření složitějších vzorů šrafování obdélníka přerušovanými čarami pod třemi různými úhly?? 0º (vodorovné šrafování) 60º 120º 24/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti opakované šrafování oblasti pod různými úhly → vytvoření složitějších vzorů šrafování obdélníka přerušovanými čarami pod třemi různými úhly?? 0º (vodorovné šrafování) 60º 120º 25/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Šrafování oblasti opakované šrafování oblasti pod různými úhly → vytvoření složitějších vzorů šrafování obdélníka přerušovanými čarami pod třemi různými úhly?? 0º (vodorovné šrafování) 60º 120º 26/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Oblast s hranicí nakreslenou v rastru VYPLŇOVÁNÍ OBLASTI S HRANICÍ NAKRESLENOU V RASTRU 27/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Semínková vyplňování semínkové vyplňování („seed fill“) semínko vybraný vnitřní bod oblasti hranice v rastru není jasně definována informace o vyplňované oblasti získávány čtením z obrazové (rastrové) paměti postup začátek = semínko postupné prohledávání obrazové paměti → hledání vnitřních bodů oblasti vnitřní body obarveny novou barvou 28/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Semínková vyplňování vnitřní bod oblasti hraniční vyplňování vnitřní bod → jiná barva než barva hranice záplavové vyplňování (přebarvování) vnitřní bod → stejná barva jako zadané semínko 29/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Hraniční vyplňování hraniční vyplňování vnitřní bod → jiná barva než barva hranice vyplnění až k hranici dané barvy GetPixel(x,y) ≠ barva_hranice 30/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Záplavové vyplňování záplavové vyplňování (přebarvování) vnitřní bod → stejná barva jako zadané semínko přebarvení pixelů dané barvy GetPixel(x,y) = původní_barva 31/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Vnitřní body oblasti směr prohledávání a vyplňování závisí na definici vnitřku hranice klasifikace vnitřních bodů oblasti 4-souvislá oblast dva body oblasti → existuje cesta složená z vodorovných a svislých kroků po vnitřních bodech oblasti 8-souvislá oblast povoleny i diagonální kroky po vnitřních bodech oblasti 32/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
4-souvislá oblast 4-souvislá oblast dva body oblasti → existuje cesta složená z vodorovných a svislých kroků po vnitřních bodech oblasti záplavové vyplňování 33/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
8-souvislá oblast 8-souvislá oblast povoleny i diagonální kroky po vnitřních bodech oblasti záplavové vyplňování 34/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Jednoduché semínkové vyplňování algoritmus procedure Semínko(x,y) begin je-li bod [x,y] vnitřní, pak obarvit bod [x,y] požadovanou barvou provést Semínko(x+1,y) provést Semínko(x-1,y) provést Semínko(x,y+1) provést Semínko(x,y-1) end nevýhody ?? 35/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Jednoduché semínkové vyplňování algoritmus procedure Semínko(x,y) begin je-li bod [x,y] vnitřní, pak obarvit bod [x,y] požadovanou barvou provést Semínko(x+1,y) provést Semínko(x-1,y) provést Semínko(x,y+1) provést Semínko(x,y-1) end nevýhody „elegantní“ rekurzivní algoritmus → v praxi nepoužitelný šíření semínek do všech směrů → každý pixel mnohokrát testován i když už byl obarven čtení z obrazové paměti ... velmi pomalá operace 36/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové semínkové vyplňování - I 37/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové semínkové vyplňování - II 38/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Algoritmus - řádkové semínkové vyplňování řádkové semínkové vyplňování („scan-line seed fill“) algoritmus vložení semínka do zásobníku dokud není zásobník prázdný: vyjmutí semínka [x,y] ze zásobníku nalezení hranice xL a xR na řádku y v nejbližším okolí bodu [x,y] nakreslení úsečky [xL,y] - [xR,y] hledání souvislých vnitřních úseků na (vyšší) úsečce [xL,y-1] - [xR,y-1] každý nalezený úsek → vložení jednoho vnitřního bodu úseku do zásobníku hledání souvislých vnitřních úseků na (nižší) úsečce [xL,y+1] - [xR,y+1] 39/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Vlastnosti algoritmu řádkové semínkové vyplňování snížení počtu přístupů do obrazové paměti používá malý zásobník pro souřadnice několika vnitřních bodů vyplňované oblasti prohledávání sousedních pixelů → jen v jednom řádku pixelů (úsek) hledání nových semínek → nad a pod úsekem 40/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Hledání nových semínek 41/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové semínkové vyplňování 42/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové semínkové vyplňování 43/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové semínkové vyplňování 44/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Řádkové semínkové vyplňování 45/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezávání objektů v rovině 46/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezávání v rovině 47/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezávání úsečky ořezávání úsečky původní úsečka krajní body [xA, yA] a [xB, yB] → co je „vidět“ z úsečky ve výstupním okně ?? 48/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezávání úsečky ořezávání úsečky původní úsečka ořezaná úsečka krajní body [xA, yA] a [xB, yB] → co je „vidět“ z úsečky ve výstupním okně ?? ořezaná úsečka úsečka výstupní okno neprotne → Ø úsečka leží celá ve výstupním okně → úsečka [xA, yA] - [xB, yB] úsečka „zasahuje“ do okna → nutné přepočítat koncové body [x’A, y’A] - [x’B, y’B] souřadnice „ořezané úsečky“ neceločíselné → zaokrouhlování → vznik nepřesností v kresbě → Cohen-Sutherlandův algoritmus 49/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Rozdělení roviny na oblasti 50/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
každá oblast ... 4-místný kód Kódy oblastí každá oblast ... 4-místný kód XYUV 1 ... y > ymax 0 ... y ≤ ymax 1 ... y < ymin 0 ... y ≥ ymin 1 ... x > xmax 0 ... x ≤ xmax 1 ... x < xmin 0 ... x ≥ xmin 51/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Zakódování oblastí 52/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Zakódování oblastí 53/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Zakódování oblastí 54/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Zakódování oblastí 55/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Zakódování oblastí 56/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Cohen-Sutherlandův algoritmus spočtení kódů krajních bodů CA a CB úsečky AB úsečka leží celá uvnitř okna → ?? úsečka leží celá mimo okno 57/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Cohen-Sutherlandův algoritmus spočtení kódů krajních bodů CA a CB úsečky AB úsečka leží celá uvnitř okna → CA ⋁ CB = 0000 úsečka leží celá mimo okno → CA ⋀ CB ≠ 0000 pokud neplatí 2. ani 3. úsečka může (ale nemusí) protnout okno ořezání úsečky → pro každou jedničku v CA i CB rovnice přímky, na které úsečka leží 58/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezání úsečky pro každou jedničku v CA i CB ... postupné ořezání úsečky jednička na první pozici v kódu → yA > ymax souřadnice ořezaného bodu A’ 59/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezání úsečky pro každou jedničku v CA i CB ... postupné ořezání úsečky jednička na druhé pozici v kódu → yA < ymin souřadnice ořezaného bodu A’ 60/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezání úsečky pro každou jedničku v CA i CB ... postupné ořezání úsečky jednička na třetí pozici v kódu → XA > xmax souřadnice ořezaného bodu A’ 61/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz
Ořezání úsečky pro každou jedničku v CA i CB ... postupné ořezání úsečky jednička na čtvrté pozici v kódu → xA < xmin souřadnice ořezaného bodu A’ 62/62 Jana Štanclová, jana.stanclova@ruk.cuni.cz