Ra cunarska gra ka Popunjavanje poligona i seckanje du...
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/1.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/2.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/3.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/4.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/5.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/6.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/7.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/8.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/9.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/10.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/11.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/12.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/13.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/14.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/15.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/16.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/17.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/18.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/19.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/20.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/21.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/22.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/23.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/24.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/25.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/26.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/27.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/28.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/29.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/30.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/31.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/32.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/33.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/34.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/35.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/36.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/37.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022020115/5c80228409d3f25c328c684b/html5/thumbnails/38.jpg)
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