Oblasťou rozumieme množinu rastrových bodov, ktoré sú vzájomne súvislo pospájané. Zadefinujme si pojem susednosti pre bod. Každému rastrovému bod P prislúcha v rastrovom obraze osem susedných, označme ich 0,...,7. Susedov 0, 2, 4 a 6 nazývame priamymi susedmi bodu P, pretože nimi reprezentované obdĺžniky majú s ním spoločnú hranu. Susedov 1, 3, 5 a 7 nazývame nepriamymi susedmi bodu P. Oblasti poznáme 4-súvislé a 8-súvislé. Pri 4-súvislej oblasti (resp. 8-súvislej) môžeme každé dva body spojiť postupnosťou 4-susedných (resp. 8-susedných) bodov z tejto oblasti. Oblasť zadaná svojimi vnútornými bodmi sa nazýva vnútorné definovaná. Oblasť zadaná hranicou sa nazýva hranične definovaná.
Applet 4 a 8 susednosť bodu P
Applet 4-connectivity 8-connectivity. Select first point with mouse. You can change raster size on left side. Author Michal Švirec
Tento algoritmus rekurzívne priradí bodom 4 - súvislej oblasti novú farbu, ak daný bod spĺňa podmienku, že je vo vnútri vyplňovanej oblasti.
Applet Vypĺňanie oblasti. Zadaj začiatočný bod.
Algorithm source:
Applet algorithm is designed as real boundary fill alg., but for visibility, it is drawing not only single pixels, but 10x10px squares. By clicking on the canvas, you specify starting point where algorithm is started... Thats why white spaces are creating near borders of other colors...
Author Martin Pullmann
Jedným zo základných postupov počítačovej grafiky je určenie vnútorného bodu mnohouholníka. Bod je vnútorný ak polpriamka rovnobežná s osou x vychádzajúca z tohto bodu pretne mnohouholník nepárnym počtom prienikov (priesečníkov) hrán. Toto môžeme pretransformovať aj na využitie pre vypĺňanie mnohouholníka. Popis je v [1].
Jednou z nevýhod predchádzajúcich algoritmov je skutočnosť,
že algoritmus je rekurzívny, čo nie je vždy vhodné. Preto vzniklo niekoľko
efektívnych algoritmov, ktoré zmenšujú hĺbku rekurzie. Jedným z príkladov
je algoritmus vypĺňania oblasti po riadkoch.
Rastrovým rozkladom mnohouholníka rozumieme vyplnenie
oblasti, ktorej hranicu tvorí mnohouholník. Najčastejšie postupujeme
tak, že urobíme rozklad mnohouholníka do riadkov, a potom použijeme riadkový
skanovací algoritmus.
Každým riadkom rastra vedieme skanovaciu priamku, pričom testujeme jej prienik s hranicou mnohouholníka (tj. jednotlivými hranami). Priesečníky potom zoradíme podľa osi x. Dvojica priesečníkov dáva úsečku, ktorá leží vo vnútri mnohouholníka. Tú potom nakreslíme príslušnou farbou.
Pri takomto usporiadaný nám môže vzniknúť problém
s hraničnými bodmi mnohouholníka, ktorých obidva susedné body sú buď
nad alebo pod skanovaciou priamkou. Tieto body musíme započítavať do
množiny priesečníkov dvakrát.
Pri teste prieniku so skanovaciou priamkou je dobré mať
všetky hrany mnohouholníka v dátovej štruktúre, aby sme nemuseli
testovať prienik zo všetkými hranami mnohouholníka. Neskôr si takúto
tabuľku vytvoríme a nazveme ju tabuľka
aktívnych hrán (TAH). Pri jej vytváraní môžeme využiť to, že ak
priamka v i-tom riadku pretína danú hranu, tak ju obvykle pretína aj v i+1
riadku.
Najprv si zoradíme všetky hrany (hrana je vlastne úsečka
s dvoma bodmi) podľa hornej súradnice y (väčšia y hodnota z tých
dvoch bodov). Hrany orientujeme vždy podľa hornej súradnice y, pričom
hrana je orientovaná zhora nadol. Môžeme použiť hašovaciu tabuľku
napr. pomocou usporiadaných zoznamov. Takúto dátovú štruktúru nazývame
tabuľkou hrán (TH). Pre každý skanovací riadok si vytvoríme
zoznam tých hrán, ktoré majú minimálnu súradnicu y práve v tomto
riadku. Pre každú hranu uložíme do TH:
Applet Tabuľky hrán (napravo zoznam hrán, ktore pretina skanovací riadok)
V tabuľke hrán máme zadefinované všetky
potrebné informácie o hrane. Podľa riadku, v ktorom skanujeme vieme y-súradnicu
horného (začiatočného) bodu orientovanej hrany, prvá položka je
y-súradnica koncového bodu hrany, druhá položka je aktuálna súradnica x
priesečníka hrany s skanovacou priamkou, tretia vyjadruje prírastok x pri
prechode na ďalší skanovací riadok.
Ďalšou dátovou štruktúrou je tabuľka aktívnych hrán (TAH), do ktorej ukladáme len tie hrany, ktoré pri spracovávaní skanovacia priamka práve pretína. Hrany v tabuľke udržujeme usporiadané podľa x-súradnice, preto pri zmene hrán v tabuľke ich utriedime napr. bublinkovým triedením.
Scan_Line algoritmus [1]:
Applet Scan-Line algoritmus mnohouholníka, vyber riadok na scan-line vpravo od zvislej úsečky
Fill pogygon. Set points for polygon. You can set color for each new point. After finish press button "vykresli". You get colored polygon created with scan-line alghoritm. Press "zmaz" button for clear scene. Author Dzurec Jan
Source codeApplet Scan line polygon clipping. Set polygon type from 3 to 6 points, then you can move these points. Press mouse on right side of vertical line for points from scan-line alghoritm. Author Ľuboš Ľahký
Source code