Ra cunarska gra ka Popunjavanje poligona i seckanje du...

38
Raˇ cunarska grafika Popunjavanje poligona i seckanje duˇ zi Vesna Marinkovi´ c Vesna Marinkovi´ c Raˇ cunarska grafika Popunjavanje poligona i seckanje duˇ 1 / 38

Transcript of Ra cunarska gra ka Popunjavanje poligona i seckanje du...

Page 1: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Racunarska grafikaPopunjavanje poligona i seckanje duzi

Vesna Marinkovic

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 1 / 38

Page 2: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Obnavljanje

Rasterizacija duzi – obnavljanje

1 Kako bi izgledala vektorska, a kako rasterska slika dva pravougaonikasa stranicama paralelnim koordinatnim osama? Koja od ove dve slikebi zauzimala manje memorije? Zasto?

2 Navesti primer gde se u praksi koriste vektorske slike, a gde rasterske.

3 Ako je koeficijent prave (a) m = 1/2 (b) m = 3 (c) m = −1/2 kolikoce piksela biti nacrtano u svakoj vrsti, a koliko u svakoj koloni?

4 Koji su nedostaci algoritma grube sile za crtanje duzi? Na koji nacinse oni mogu eliminisati?

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 2 / 38

Page 3: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Obnavljanje

Rasterizacija duzi – obnavljanje

5 Koja je kljucna ideja midpoint algoritma za crtanje duzi?

6 Koju vrednost zovemo promenljiva odlucivanja i zasto?

7 Zasto prvu vrednost promenljive odlucivanja mnozimo sa 2 urealizaciji midpoint algoritma?

8 Koja je vremenska slozenost midpoint algoritma za crtanje duzi?

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 3 / 38

Page 4: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Obnavljanje

Rasterizacija kruga – obnavljanje

9 Kako funkcionise algoritam grube sile za iscrtavanje kruga? Koji sunjegovi nedostaci?

10 Zasto se u midpoint algoritmu za crtanje kruga razmatra samoosmina kruga?

11 Koju vrednost u algoritmu rasterizacije kruga zovemo promenljivaodlucivanja?

12 Koja je razlika u inkrementalnom racunanju vrednosti d u odnosu naalgoritam za crtanje duzi?

13 Cemu je jednaka prva vrednost d? Kako se borimo sa tim sto pocetnavrednost za d nije celobrojna?

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 4 / 38

Page 5: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Obnavljanje

Rasterizacija kruga – obnavljanje

14 U unapređenoj verziji midpoint algoritma za crtanje kruga, zasto jeneophodno da svaki put azuriramo obe promenljive ∆E i ∆SE?

15 Gde se pomera referentna tacka iz tacke (xp, yp) ako je izabrana tackaE , a gde ako je izabrana tacka SE?

16 Koja je vremenska slozenost midpoint algoritma za crtanje kruga?

17 Kako izmeniti midpoint algoritam ako je potrebno nacrtati krug sacentrom u tacki (c1, c2)?

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 5 / 38

Page 6: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje proizvoljnog regiona

Povezanost regiona

Nakon iscrtavanja primitiva, nekad ih je potrebno i obojitiRazmatramo prvo opsti slucaj, kada je dat proizvoljni regionRegion mora da bude povezan

Region je 4-povezan ako se svaka dva piksela tog regiona mogupovezati nizom piksela iz tog regiona do kojih se stize kretanjemnagore, nadole, ulevo i udesnoRegion je 8-povezan ako se svaka dva piksela tog regiona mogupovezati nizom piksela iz tog regiona do kojih se stize kretanjemnagore, nadole, ulevo, udesno, gore-levo, gore-desno, dole-levo,dole-desno

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 6 / 38

Page 7: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje proizvoljnog regiona

Definisanje regiona

Za dati pocetni piksel P region se moze definisati na dva nacina:

region definisan unutrasnjoscu je najveci povezani region piksela cija jeboja ista kao boja piksela Pregion definisan granicom je najveci povezani region piksela cija bojanije jednaka nekoj granicnoj vrednosti boje

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 7 / 38

Page 8: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje proizvoljnog regiona

Algoritmi za popunjavanje regiona definisanogunutrasnjoscu

Flood-fill algoritamKrece se od pocetnog piksela u unutrasnjosti (seed-a), proverava seda li je boja piksela stara, ako jeste piksel se boji novom bojom ipomeramo se iz ovog piksela u 4 (ili 8) smerovaOvakva implementacija je prakticno neupotrebljiva (zbog potencijalnovelike dubine rekurzije)

procedure FloodFill4(x, y, old_color, new_color : integer);

begin

if (getPixel(x,y) == old_color) then

begin

setPixel(x,y,new_color);

FloodFill4(x-1,y,old_color,new_color);

FloodFill4(x+1,y,old_color,new_color);

FloodFill4(x,y-1,old_color,new_color);

FloodFill4(x,y+1,old_color,new_color);

end

end.

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 8 / 38

Page 9: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje proizvoljnog regiona

Algoritmi za popunjavanje regiona definisanog granicom

Boundary-fill algoritamKrece se od pocetnog piksela u unutrasnjosti, proverava se da li jeboja piksela razlicita od granicne vrednosti boje i od nove vrednostiboje, ako jeste piksel se boji novom bojom i pomeramo se iz ovogpiksela u 4 (ili 8) smerovaRekurzivna priroda algoritma moze prouzrokovati preran prekid radaako se nova boja pojavi u regionu koji je definisan granicom

procedure BoundaryFill4(x, y, boundary_color, new_color : integer);

begin

color c := getPixel(x,y);

if (c != boundary_color && c != new_color) then

begin

setPixel(x,y,new_color);

BoundaryFill4(x-1,y,boundary_color,new_color);

BoundaryFill4(x+1,y,boundary_color,new_color);

BoundaryFill4(x,y-1,boundary_color,new_color);

BoundaryFill4(x,y+1,boundary_color,new_color);

end

end.

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 9 / 38

Page 10: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Naivni algoritmi za popunjavanje poligona

Zadatak je obojiti sve piksele koji se nalaze u unutrasnjosti poligona(istom bojom)

Za svaku tacku mozemo da utvrdimo da li pripada unutrasnjostipoligona

Ideja naivnog algoritma:

Odrediti najmanji pravougaonik sa stranicama paralelnim koordinatnimosama koji sadrzi dati poligonZa svaku tacku tog pravougaonika proverava se da li pripadaunutrasnjosti poligonaProvera pripadnosti vrsi se na osnovu parnosti broja preseka proizvoljnepoluprave iz te tacke sa stranicama poligona

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 10 / 38

Page 11: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona

Scan linija je horizontalna linija na rasterskom sistemuIdeja algoritma: za svaku scan liniju odrediti piksele koji se nalaze uunutrasnjosti poligona i obojiti ih

A

B

C

D

E

F

X

Algoritam korektno radi i za konkavne poligone, cak i ako poligon imasamopresecanja ili rupe (kako se za njih definise unutrasnjost?)

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 11 / 38

Page 12: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona

Na svakoj scan liniji određujemo tacke koje pripadaju stranicamapoligona

Za svaki presek scan linije sa stranicom poligona inkrementiramovrednost namenskog brojaca (cija je inicijalna vrednost 0)

Vazna je parnost brojaca:

kod tacaka sa neparnom vrednoscu treba zapoceti bojenjekod tacaka sa parnom vrednoscu treba prekinuti bojenje

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 12 / 38

Page 13: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona – specijalni slucajevi

Sta ako scan linija sece stranicu u temenu?

za stranicu poligona racunamo tacku preseka sa najmanjom ykoordinatom, a ne racunamo tacku preseka sa najvecom y koordinatomparnost se menja osim ako je u pitanju lokalni minimum/maksimum

Sta ako poligon ima horizontalnu stranicu?

kod horizontalnih stranica ne brojimo nijednu presecnu tackuefekat ovog pravila je da se donje horizontalne stranice boje, a gornjene; takođe ne boje se i desne tacke stranica

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 13 / 38

Page 14: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona – primer

A B

C D

E

FG

HI

J

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 14 / 38

Page 15: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona – sliver

Sliver je uska poligonalna oblast koja sadrzi 0 ili 1 piksel za neke scanlinije

Ovo je posledica toga da se boje samo pikseli koji su u unutrasnjostiili na levim ili donjim stranicama poligona

Antialiasing tehnika se moze koristiti za resavanje ovog problema

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 15 / 38

Page 16: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Određivanje preseka scan linije sa stranicama poligona

Najcesce scan linija sece samo nekoliko stranica poligona, dakle nijeisplativo da određujemo presek scan linije sa svim stranicama poligona

Najcesce stranice koje sece n-ta scan linija sece i (n + 1)-a scan linija

Koristi se inkrementalni pristup da bi se izracunali preseci jedne scanlinije na osnovu prethodne scan linije, bez toga da analiticki racunamopresek scan linije sa svakom stranicom poligona

Ideja nalik midpoint algoritmu, samo je potrebno uvek birati tacke uunutrasnjosti poligona

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 16 / 38

Page 17: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Određivanje preseka scan linije sa stranicama poligona –inkrementalni pristup

Prilikom prelaska na narednu scan liniju, inkrementira se ykoordinata: yi+1 = yi + 1

Za pravu yi+1 = mxi+1 + B vazi veza:

xi+1 =1

m· (yi+1−B) =

1

m(yi + 1−B) =

1

m· (yi −B) +

1

m= xi +

1

m

Potrebno je izvrsiti zaokruzivanje za racunanje najblizeg piksela uunutrasnjosti

Zelimo da modifikujemo navedenu vezu tako da koristi samocelobrojnu aritmetiku

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 17 / 38

Page 18: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Određivanje preseka scan linije sa levom stranicamapoligona

Razmatramo slucaj kada je m > 1 i kada je u pitanju leva stranica(parnost pre ovog preseka je 0)

Vazi:

xi+1 = xi +1

m= xi +

xmax − xmin

ymax − ymin

Razmatramo posebno celi i razlomljeni deo vrednosti xmax−xminymax−ymin

kada razlomljeni deo pređe 1, inkrementiramo celi deo adekrementiramo razlomljeni deokada je razlomljeni deo 0, mozemo da obojimo piksel (x , y)kada je razlomljeni deo razlicit od 0, treba zaokruziti tako da x pripadaunutrasnjosti poligona

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 18 / 38

Page 19: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Izracunavanje preseka sa levom stranicom – primer

xmin = 1, xmax = 5, ymin = 1, ymax = 14, (xmax − xmin)/(ymax − ymin) = 4/13

x1 = 1 (razlomljeni deo je jednak 0),

x2 = x3 = x4 = 2 (razlomljeni deo je > 0, zaokruzujemo tako da pripadaunutrasnjosti poligona)

x5 = 3 (razlomljeni deo je presao 1, pa smo uvecali x za 1) , . . .

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 19 / 38

Page 20: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Algoritmi za određivanje preseka sa levom stranicom

procedure LeftEdgeScan(xmin, ymin, xmax, ymax : integer);

begin

x := xmin;

y := ymin;

brojilac := xmax-xmin;

imenilac := ymax-ymin;

inkrement := imenilac; { vazno za zaokruzivanje na unutrasnji piksel }

for y := ymin to ymax do

begin

SetPixel(x,y);

inkrement := inkrement+brojilac;

if inkrement > imenilac then

begin { prekoracenje, zaokruzi na sledeci }

{ piksel i smanji inkrement }

x := x+1;

inkrement := inkrement - imenilac;

end;

end

end.

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 20 / 38

Page 21: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona – prakticna implementacija

Namenska struktura podataka cuva podatke o aktivnim stranicama A– stranicama koje se seku sa tekucom scan linijom

Prva scan linija je y = ymin, gde je ymin najmanja y vrednost svihtemena poligona

Skup S cuva podatke o jos uvek neobrađenim stranicama poligona

Inicijalno je A = ∅, a S sadrzi sve stranice poligona (sortirane ponajmanjoj y vrednosti temena)

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 21 / 38

Page 22: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Popunjavanje poligona

Scan popunjavanje poligona – algoritam

1 Prebaci iz skupa S u skup A one stranice cija je minimalna y vrednostjednaka y vrednosti scan linije

2 Sortiraj stranice u skupu A rastuce prema x koordinati tacke presekasa scan linijom

3 Oboji sve piksele na scan liniji između neparnih i parnih preseka

4 Izbaci iz skupa A one stranice cija je maksimalna y vrednost jednakay vrednosti scan linije

5 Uvecaj y vrednost scan linije za 1

6 Azuriraj tacke preseka kao u algoritmu LeftEdgeScan

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 22 / 38

Page 23: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Problem seckanja duzi

Opsti zadatak: za dati kliping region nacrtati samo duzi i delove duzikoji mu pripadaju

Rezultat seckanja jedne duzi je ili jedna duz ili prazan skup

Znacajan je da bi se izbegla skupa izracunavanja prilikomrasterizacije, određivanja vidljivih povrsi, osvetljenja, . . .

Moze se primeniti pre ili posle raserizacije duzi

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 23 / 38

Page 24: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Problem seckanja duzi u odnosu na pravougaoni region

Najcesce je kliping region pravougaonik sa stranicama paralelnimkoordinatnim osama

Ako su koordinate donjeg levog ugla pravougaonika (xmin, ymin) agornjeg desnog (xmax , ymax), treba da budu nacrtane samo tacke(x , y) za koje vazi xmin ≤ x ≤ xmax , ymin ≤ y ≤ ymax

Analiza krajnjih tacaka:ako su obe krajnje tacke unutar pravougaonika nacrtaj celu duzako je jedna unutar a druga van onda mora da se vrsi odsecanjeako su obe krajnje tacke van pravougaonika onda se nista ne zna

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 24 / 38

Page 25: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cohen-Sutherland-ov algoritam za seckanje duzi

Inicijalnim testovima na datoj duzi utvrđuje se da li se mozda moguizbeci izracunavanja preseka

Ako oba temena duzi pripadaju pravougaoniku, onda trivijalno trebaprihvatiti celu tu duz

Ako se duz ne moze trivijalno prihvatiti, onda se vrse provere (npr.ako su obe x koordinate temena duzi manje od xmin, treba odbaciticelu tu duz)

Na osnovu dva jednostavna poređenja nekada se moze utvrditi da sekompletna duz moze trivijalno odbaciti

Ako je jedno teme duzi van pravougaonika, onda treba odbaciti deoduzi do pravougaonika i nastaviti na isti nacin

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 25 / 38

Page 26: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cohen-Sutherland-ov algoritam za seckanje duzi –implementacija

Ravan se deli na 9 regiona, svakom regionu se dodeljuje 4-bitni kod

Svaki bit u ovom kodu se postavlja na 1 (tacno) ili 0 (netacno), a 4bita u kodu odgovaraju sledecim uslovima:

prvi bit (najmanje tezine): “iznad gornje stranice”, y > ymax

drugi bit (najmanje tezine): “ispod donje stranice”, y < ymin

treci bit (najmanje tezine): “desno od desne stranice”, x > xmax

cetvrti bit (najmanje tezine): “levo od leve stranice”, x < xmin

1001 0001 0101

1000 0000 0100

1010 0010 0110

Tacka se nalazi unutar regiona samo ako sva 4 bita imaju vrednost 0

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 26 / 38

Page 27: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cohen-Sutherland-ov algoritam za seckanje duzi

1

2

3

4

Za svaku duz racunaju se kodovi dve krajnje tacke K1 i K2

duz kod koje je K1 = 0 i K2 = 0 se trivijalno prihvataduz koja se u celosti nalazi u poluravni van stranice se trivijalno odbacuje(K1&K2 6= 0)

Ako duz ne mozemo trivijalno prihvatiti ili odbaciti, delimo je na dve duzi ionda odbacujemo ili prihvatamo bar jednu od dve dobijene duzi

koristimo stranice pravouganika za podelu duzibiramo redosled preseka sa stranicama: TOP - BOTTOM - RIGHT - LEFTracunamo koordinate presecne tackenastavljamo sa skracenom duzi

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 27 / 38

Page 28: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Funkcija za racunanje koda krajnje tacke

Implementacija u C-u (koriste se C-ovski bitski operatori)

#define TOP 1

#define BOTTOM 2

#define RIGHT 4

#define LEFT 8

char CompOutCode(double x, double y,

double xmin, double ymin, double xmax, double ymax) {

char code = 0;

if (y>ymax)

code |= TOP;

else if (y<ymin)

code |= BOTTOM;

if (x>xmax)

code |= RIGHT;

else if (x<xmin)

code |= LEFT;

return code;

}

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 28 / 38

Page 29: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cohen-Sutherland-ov algoritam (I deo)

void CohenSutherlandLineClipAndDraw(

double x0, double y0, double x1, double y1,

double xmin, double ymin, double xmax, double ymax) {

bool accept := false, done := false;

char pointCode0, pointCode1, pointOut;

double x, y;

pointCode0 := CompOutCode(x0,y0,xmin,ymin,xmax,ymax);

pointCode1 := CompOutCode(x1,y1,xmin,ymin,xmax,ymax);

do {

if (pointCode0==0 && pointCode1==0) { /*prihvati duz i izadji*/

accept := true;

done := true;

}

else if ((pointCode0 & pointCode1) != 0)

done := true; /* odbaci duz i izadji */

else { /* izaberi tacku koja je van pravougaonika */

if (pointCode0 != 0) then

pointOut := pointCode0;

else

pointOut := pointCode1;

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 29 / 38

Page 30: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cohen-Sutherland-ov algoritam (II deo)

if (pointOut & TOP) {

x := x0+(x1-x0)*(ymax-y0)/(y1-y0); /* prava y = ymax*/

y := ymax;

}

else if (pointOut & BOTTOM) {

x := x0+(x1-x0)*(ymin-y0)/(y1-y0); /* prava y = ymin */

y := ymin;

}

else if (pointOut & RIGHT) {

y := y0+(y1-y0)*(xmax-x0)/(x1-x0); /* prava x = xmax */

x := xmax;

}

else (pointOut & LEFT) { /* prava x = xmin */

y := y0+(y1-y0)*(xmin-x0)/(x1-x0);

x := xmin;

}

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 30 / 38

Page 31: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cohen-Sutherland-ov algoritam (III deo)

if (pointOut==pointCode0) {

x0 := x;

y0 := y;

pointCode0 := CompOutCode(x0,y0);

}

else {

x1 := x;

y1 := y;

pointCode1 := CompOutCode(x1,y1);

}

}

}

while(!done);

if (accept)

MidpointLine(x0,y0,x1,y1)

}

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 31 / 38

Page 32: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cyrus-Beckov algoritam za seckanje duzi

Algoritam sustinski drugaciji od Cohen-Sutherland-ovog algoritma i uopstem slucaju je efikasniji

Primenljiv je na proizvoljni konveksni kliping poligon

Razmatramo parametarski oblik duzi P0P1:

P(t) = P0 + (P1 − P0)t, t ∈ [0, 1]

Treba odrediti gde duz sece prave kojima pripadaju stranice klipingregiona

resavamo po jednom po t za svaku od stranica kliping regionautvrđujemo koji od ovih preseka pripada kliping regionu

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 32 / 38

Page 33: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cyrus-Beckov algoritam za seckanje duzi

P0

P1

PE

P

normala N

N · (P(t)− PE ) = 0

ivica E

unutrasnjost regiona

N · (P1 − PE ) < 0 za tacku P1 koja je unutar poligona

N · (P0 − PE ) > 0 za tacku P0 koja je izvan poligona

N · (P(t)− PE ) = 0 za tacku P(t) koja je na stranici poligona

gde je N normala stranice poligona usmerena ka spoljasnjosti poligona, atacka PE je proizvoljna tacka sa ivice E (npr. teme kliping regiona)

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 33 / 38

Page 34: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cyrus-Beckov algoritam za seckanje duzi

Uslov iz kojeg se moze izracunati tacka preseka:

N · (P(t)− PE ) = 0

N · (P0 + (P1 − P0)t − PE ) = 0

t =N · (P0 − PE )

−N · (P1 − P0)

t =N · (P0 − PE )

−N · D

gde je sa D oznacen vektor−−−→P0P1

Proverava se da li je imenilac razlicit od nule

da li vazi D 6= 0 (tj. tacke P0 i P1 su razlicite)da li vazi N 6= 0 (sto ne vazi samo u slucaju greske)da li vazi −N · D 6= 0 (stranica i duz koja se secka nisu paralelne)

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 34 / 38

Page 35: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cyrus-Beckov algoritam za seckanje duzi

PE

PE

PL

PL

t = 0

t = 1PE

PL

t = 0

t = 1

Eliminisu se vrednosti za t koje su van intervala [0,1]Koje od preostalih vrednosti proizvode unutrasnje preseke? Nije ispravnouzeti vrednosti koje se nalaze najdublje unutraTacke klasifikujemo na potencijalno ulazne (PE) i potencijalno izlazne (PL)

N · D < 0⇒ PE(ugao između vektora N i D je > 90◦, pa je cos manji od 0)N · D > 0⇒ PL(ugao između vektora N i D je < 90◦, pa je cos veci od 0)

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 35 / 38

Page 36: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cyrus-Beckov algoritam za seckanje duzi

PE

PE

PL

PL

t = 0

t = 1PE

PL

t = 0

t = 1

Sve preseke je potrebno sortirati

Za vrednost tE proglasavamo maksimum od ulaznih tacaka i t = 0

Za vrednost tL proglasavamo minimum od izlaznih tacaka i t = 1

Ako je tL < tE ne postoji presek

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 36 / 38

Page 37: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Cyrus-Beckov algoritam

izracunaj Ni i odredi P_Ei za svaku stranicu kliping regiona;

za svaku duz koju treba iseckati uradi sledece:

if (P1==P0)

seckaj kao tacku

else {

t_E := 0; t_L := 1;

za svakog kandidata za presek uradi sledece:

if N_i * D <> 0 then {

/* ignorisi paralelne linije */

izracunaj t;

upotrebi znak N_i * D da kategorizujes kao PE ili PL;

if (PE) t_E := max(t_E,t);

if (PL) t_L := min(t_L,t);

}

if (t_E>t_L)

return nil;

else

return P(t_E) i P(t_L);

}

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 37 / 38

Page 38: Ra cunarska gra ka Popunjavanje poligona i seckanje du zipoincare.matf.bg.ac.rs/~vesnap/grafika/03_popunjavanje_seckanje.pdf · osama koji sadr zi dati poligon Za svaku ta cku tog

Seckanje duzi

Liang-Barsky algoritam

Liang i Barsky su nezavisno razvili parametarski kliping algoritam

Optimizovan je za specijalni slucaj kada je kliping regionpravougaonik sa horizontalnim/vertikalnim stranicama

Kliping ivica normala N PE P0 − PE t = N·(P0−PE )−N·D

left: x = xmin (−1, 0) (xmin, ymin) (x0 − xmin, y0 − ymin)−(x0−xmin)

x1−x0

right: x = xmax (1, 0) (xmax , ymax ) (x0 − xmax , y0 − ymax )−(x0−xmax )

x1−x0

bottom: y = ymin (0,−1) (xmin, ymin) (x0 − xmin, y0 − ymin)−(y0−ymin)

y1−y0

top: y = ymax (0, 1) (xmax , ymax ) (x0 − xmax , y0 − ymax )−(y0−ymax )

y1−y0

U izrazu za t brojilac je usmereno rastojanje tacke P0 do stranice, aimenilac horizontalna ili vertikalna projekcija duzi

Vesna Marinkovic Racunarska grafika Popunjavanje poligona i seckanje duzi 38 / 38