56
Osnovni algoritmi rasterske grafike za crtanje 2D primitiva Nela Bosner Reprezentacija pixel-a Scan converting za linije Scan converting za kružnice Obrezivanje (clipping) Osnovni algoritmi rasterske grafike za crtanje 2D primitiva 2. dio kolegija Raˇ cunalna grafika Nela Bosner

Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Embed Size (px)

Citation preview

Page 1: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)

Osnovni algoritmi rasterske grafike zacrtanje 2D primitiva

2. dio kolegija Racunalna grafika

Nela Bosner

Page 2: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)

DefinicijaScan convering je aproksimacija ili diskretizacijamatematickih primitiva, definiranih pomocu svojih vrhova ukartezijevim koordinatama, skupom pixel-a odredenogintenziteta sive ili neke druge boje.

Scan converting može biti implementiranhardware-skisoftware-ski unutar grafickog paketa

Algoritmi za scan converting se moraju izvršavati brzo. Onikoriste

inkrementalne metode da bi minimizirali broj operacija(narocito * i /)cjelobrojnu aritmetiku (zbog diskretnosti pixel-a)

Page 3: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)

Reprezentacija pixel-a

Mi cemo reprezentirati pixel kaokružna tocka centrirana na pixel-ovim (x , y)koordinatama cjelobrojne mreže.

g g g g gg g g g gg g g g gg g g g g

Kod pravih zaslona razmak izmedu susjednih pixel-a moževarirati:

kod nekih sustava susjedni pixel-i se preklapajukod nekih postoji razmak izmedu pixel-aa kod nekih je razmak izmedu pixel-a uži u vodoravnomsmjeru nego u okomitom.

Page 4: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Scan converting za linije

Scan converting algoritam za linije racuna koordinate pixel-akoji leže na ili blizu idealne, infinitezimalno tanke ravne linijesmještene na 2D rasterskoj mreži.

Razmatramo 1 pixel debelu aproksimaciju linije. Svojstva:niz pixel-a koji leže što je bliže moguce linijii koji je što ravnijiza linije sa koeficijentom smjera k ∈ [−1,1], tocno 1pixel u svakom stupcu treba biti osvjetljenza linije sa koeficijentom smjera k /∈ [−1,1], tocno 1pixel u svakom retku treba biti osvjetljensve linije trebaju biti nacrtane sa konstantnom nijansomsive ili bojom,

neovisno o duljini i orijentacijišto je brže moguce

Page 5: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Dodatna svojstva:mogucnost crtanja linija debljih od 1 pixel-a,razlicitih stilova linije (crtkano, tockasto, . . . )razlicitih oblika krajnjih tocakamogucnost korištenja antialiasing tehnika

Mi cemo razmatrati samo 1 pixel debele linije koje imajutocno jedan monokromatski pixel po stupcu (ili retku).

g g g g gg g g g gg g g g gg g g g g

�������

���

w w w w w

Page 6: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Osnovni inkrementalni algoritam

Ulaz: (xl , yl), (xd , yd ) — krajnje tocke linijeDefiniramo: ∆x = xd − xl , ∆y = yd − yl

Izracunamo: k = ∆y/∆xU algoritmu osvijetlit cemo pixel sa koordinatama(xi ,Round(yi)):

xi , i = 0,1,2, . . . — cjelobrojne koordinatayi = kxi + lRound(yi ) = b0.5 + yic— cjelobrojna koordinata

Ovaj algoritam bira pixel-e najbliže liniji, alije neefikasan jer imamo *,+ i b cMnoženje možemo eliminirati ako primijetimo da za∆ix = xi+1 − xi

yi+1 = kxi+1 + l = k(xi + ∆ix) + l = yi + k∆ix .

Page 7: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

S obzirom da mi crtamo pixel po pixel, za |k | ≤ 1uzimamo da je ∆ix = 1, pa slijedi

xi+1 = xi + 1,yi+1 = yi + k .

Time smo definirali inkrementalni algoritam.Inicijalizacija: za (x0, y0) uzmu se cjelobrojnekoordinate jedne od krajnjih tocaka.Za |k | > 1 zamijene se uloge od x i y :

yi+1 = yi + 1,xi+1 = xi + 1/k .

Ovaj algoritam se još naziva i digital differentialanalyzer (DDA).

Page 8: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

k k k kk k k kk k k k

������

������

����

{{ {

{

s s(xi , Round(yi ))

(xi , yi )

(xi + 1, Round(yi + k))

(xi + 1, yi + k)

��*

Hj

����

HHY

Slika: Inkrementalno racunanje za (xi , yi ).

Page 9: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Algoritam (Inkrementalni algoritam za scan converting linije)

void Linija( /* Pretpostavlja se |k| ≤ 1, xl < xd */

int xl, int yl, /* Lijeva krajnja tocka */

int xd, int yd, /* Desna krajnja tocka */

int v) /* Vrijednost smještena u pixel linije */

{int x; /* x ide od xl do xd jedinicnim korakom */

double dy = yd − yl;double dx = xd − xl;double k = dy/dx;double y = yl;for (x = xl ; x <= xd ; x + +){

NacrtajPixel(x,Round(y),v); /* Postavlja pixel na v */

y+ = k;}

}

Page 10: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

(Bresenhamov) Algoritam srednje tocke zaliniju

Nedostaci osnovnog inkrementalnog algoritma:zaokruživanje Round(y ) zahtijeva odredeno vrijemeza racunanje k potrebno je dijeljenje

Bresenham je razvio algoritam koji koristi samocjelobrojnu aritmetiku i inkrementalan je.Verzija ovog algoritma u aritmetici pomicnog zarezamože se primijeniti kod linija sa krajnjim tockama urealnim koordinatama.Pretpostavlja se da je koeficijent smjera linije k ∈ [0,1〉.Ostali koeficijenti smjera mogu se obraditi pogodnimzrcaljenjem oko glavnih osi.Donju–lijevu krajnju tocku oznacavamo sa (x0, y0), agornju–desnu sa (x1, y1).

Page 11: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

k k kk k kk k k

������������

{s

P = (xP , yP )

I

SI

M

Q

prijašnjipixel

izbor trenut-nog pixel-a

izbor sljede-ceg pixel-a

Slika: Mreža pixel-a za algoritam srednje tocke, sa oznaženomsrednjom tockom M, i pixel-ima I i SI izmedu kojih se bira sljedeciosvjetljeni pixel.

Page 12: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Pixel izabran u prijašnjem koraku oznacen je saP = (xP , yP).U tekucem koraku biramo izmedu dva pixel-a I i SI.Neka je Q tocka sjecišta linije koju obradujemo i linijemreže x = xp + 1.U Bresenhamovoj formulaciji

racuna se razlika okomitih udaljenosti d(I,Q) i d(SI,Q)predznak razlike se koristi za odredivanje pixel-a bližegtocki Q

U formulaciji srednje tockepromatra se na kojoj strani linije leži srednja tocka Mako M leži iznad linije, bira se pixel Iako M leži ispod linije, bira se pixel SI

Linija može prolaziti izmedu I i SI, ili oba pixel-a moguležati na jednoj strani.U oba slucaja test srednje tocke bira najbliži pixel.Greška je uvijek ≤ 1/2.

Page 13: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Za test srednje tocke reprezentirat cemo linijuimplicitnom funkcijom:

F (x , y) = ax + by + c = 0

Za dy = y1 − y0 i dx = x1 − x0 eksplicitni oblik linije je

y =dydx

x + l ,

odakle je

F (x , y) = dy · x − dx · y + l · dx = 0,

a = dy , b = −dx , c = l · dx .

Page 14: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Za funkciju F (x , y) vrijedi:F (x , y) = 0 na linijiF (x , y) > 0 za tocke ispod linijeF (x , y) < 0 za tocke iznad linije

−20

−10

0

10

20

−20−10

010

20−100

−50

0

50

100

150

xy

z

Slika: Graf funkcije F (x , y).

Page 15: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Za primjenu testa srednje tocketrebamo izracunati F (M) = F (xP + 1, yP + 1

2) i provjeritinjezin predznakdefiniramo test varijablu d = F (xP + 1, yP + 1

2) za kojuje po definiciji

d = a(xP + 1) + b(

yP +12

)+ c

ako je d > 0 biramo pixel SIako je d < 0 biramo pixel Iako je d = 0 svejedno je, pa biramo I

Page 16: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Promatramo lokaciju tocke M na sljedecoj liniji mreže:ovisi da li smo izabrali I ili SIako je izabran I, M se pomice jedan korak u smjeru x

dnovi = F(

xP + 2, yP +12

)= a(xP + 2) + b

(yP +

12

)+ c

= dstari + a∆I = a = dy

test varijabla se dobiva inkrementiranjem tekucevrijednosti za ∆I bez racunanja F (M).

Page 17: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

ako je izabran SI, M se pomice jedan korak u smjeru xi jedan u smjeru y

dnovi = F(

xP + 2, yP +32

)= a(xP + 2) + b

(yP +

32

)+ c

= dstari + a + b∆SI = a + b = dy − dx

test varijabla se dobiva inkrementiranjem tekucevrijednosti za ∆SI .

Page 18: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Buduci da je prvi pixel linije prva krajnja tocka (x0, y0),prva srednja tocka je u (x0 + 1, y0 + 1

2).Za inicijalnu vrijednost od d vrijedi

F(

x0 + 1, y0 +12

)= a(x0 + 1) + b

(y0 +

12

)+ c

=ax0 + by0 + c + a +b2

=F (x0, y0) + a +b2

Ali, (x0, y0) je tocka na liniji, pa je F (x0, y0) = 0, i

dpocetni = a +b2

= dy − dx2.

Page 19: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Da bi izbjegli dijeljenje u dpocetni redefinirat cemofunkciju F (x , y):

F (x , y) = 2(ax + by + c).

Množenje cijele jednadžbe ne mijenja predznak testvarijable.Za racunanje dnovi potrebno je samo zbrajanje.

Napomena: Ova verzija algoritma vrijedi samo za one linijeciji je koeficijent smjera k ∈ [0,1〉.

ZadatakNapišite algoritam srednje tocke za scan converting linijekoji obraduje linije sa svim mogucim koeficijentima smjera.

Page 20: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Algoritam (Algoritam srednje tocke za scan converting linije)void SredtocLinija( /* Pretpostavlja se k ∈ [0, 1〉, x0 < x1 */

int x0, int y0, int x1, int y0, int v){

int dx = x1− x0;int dy = y1− y0;int d = 2 ∗ dy − dx; /* Inicijalna vrijednost od d */int deltaI = 2 ∗ dy; /* Korak za pomicanje do I */int deltaSI = 2 ∗ (dy − dx); /* Korak za pomicanje do SI */int x = x0;int y = y0;NacrtajPixel(x,y,v); /* Pocetni pixel */while(x < x1){

if(d <= 0){ /* Izaberi I */d+ = deltaI;x + +;

} else{ /* Izaberi SI */d+ = deltaSI;x + +;y + +;

}NacrtajPixel(x,y,v); /* Izabrani pixel najbliži liniji */

}}

Page 21: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Primjer

Želimo aproksimirati liniju zadanu krajnjim tockama (5,8) i(9,11).

Tok algoritma:

dx = 4, dy = 3, deltaI = 6, deltaSI = −2

1 x = 5, y = 8, d = 2, biram SI2 x = 6, y = 9, d = 0, biram I3 x = 7, y = 9, d = 6, biram SI4 x = 8, y = 10,d = 4, biram SI5 x = 9, y = 11, kraj

Page 22: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

3 4 5 6 7 8 9 106

7

8

9

10

11

12

w w w w w

��������

Slika: Aproksimacija linije od (5,8) do (9,11) algoritmom srednjetocke.

Page 23: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

NapomenePoredak krajnjih tocaka: Treba se osigurati da selinija od P0 do P1 aproksimira istim skupom pixel-a kaoi linija od P1 do P0.

Jedino mjesto gdje izbor pixel-a ovisi o smjeru linije jekada linija prolazi kroz srednju tocku i d = 0.→ za k ∈ [0,1〉 u toj situaciji birali smo I.← za k ∈ [0,1〉 moramo birati JZ kako bismo dobili istirezultat.Slicne prilagodbe treba napraviti i za ostale koeficijentesmjera.

Page 24: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Kako zapoceti na rubu pravokutnika za obrezivanje:Algoritam bi trebao prihvatiti linije koje su analitickiobrezane (o tome kasnije).

Kada je linija odrezana kod lijevog ruba x = xminpravokutnika za obrezivanje.

Sjecište linije i ruba ima cjelobrojnu x koordinatu i realnuy koordinatu.Kao pocetni pixel uzimamo (xmin, Round(kxmin + l)) (istipixel kao i kod inkrementalnog algoritma).Test varijabla se inicijalizira sa F (M) na srednjoj tockiizmed I i SI u sljedecem stupcu.Ako se prvo odreže linija kod x = xmin, i onda primijenialgoritam srednje tocke od (xmin, Round(kxmin + l)) do(x1, y1) onda necemo dobiti korektan skup pixel-a —odrezana linija ima drugaciji koeficijent smjera.

Page 25: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

{ kk

������������������������

s(xmin, Round(kxmin + l))

(xmin, (kxmin + l))

I

SI

M

x = xmin

y = yminpravokutnik za obrezivanje

XXz

-

Slika: Aproksimacija linije od okomitog ruba pravokutnika zaobrezivanje.

Page 26: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

Kada je linija odrezana kod donjeg ruba y = yminpravokutnika za obrezivanje.

Za linije sa malim koeficijentom smjera postoji višepixel-a koji leže na pravcu y = ymin.Sve te tocke moraju ostati unutar pravokutnika.Zbog toga se prvo nade sjecište linije i pravcay = ymin − 1

2 , i zaokruži se x vrijednost.Prvi pixel odrezane linije je B = (Round(xymin− 1

2), ymin).

Ako samo nademo sjecište linije i pravca y = ymin, izaokružimo njegovu x koordinatu dobit cemo pixel A ane B.

Page 27: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinijeOsnovniinkrementalnialgoritam

Algoritam srednjetocke

Scanconverting zakružnice

Obrezivanje(clipping)

���������������������������

y y y yi i i i i i i ii i i i i i i i i i i iy y y y y y y ys s

x = xmin

y = yminB

A

y = ymin − 1

y = ymin − 12

Slika: Aproksimacija linije od vodoravnog ruba pravokutnika zaobrezivanje.

Page 28: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Scan converting za kružnice

Implicitna jednadžba kružnice sa središtem u ishodištu

x2 + y2 = R2.

Kružnice koje nemaju središte u ishodištu mogu setranslatirati u ishodište.

Korištenjem eksplicitne jednadžbe kružnice

y = ±√

R2 − x2

možemo nacrtati cetvrtinu kružnice za x ∈ [0,R] iy > 0, i koristiti simetriju. — NEEFIKASNO

koristi se * i √

kružnica ce imati velike razmake izmedu pixel-a za xblizu R, jer se nagib krivulje približava∞

Korištenjem parametarskog oblika (R cos θ,R sin θ) zaθ ∈ [0, π/2] — NEEFIKASNO

koriste se trigonometrijske funkcije

Page 29: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Osmerostruka simetrija

-

6

������@

@@@@@

&%'$rrrrr r r r (y, x)

(x, y)(−x, y)

(−y, x)

(−y,−x)

(−x,−y)(x,−y)

(y,−x)

void TockeKruznice(int x,int y,int v){

NacrtajPixel(x,y,v);NacrtajPixel(y,x,v);NacrtajPixel(y,-x,v);NacrtajPixel(x,-y,v);NacrtajPixel(-x,-y,v);NacrtajPixel(-y,-x,v);NacrtajPixel(-y,x,v);NacrtajPixel(-x,y,v);

}

Treba se izracunati aproksimacija samo za odsjecakkružnice od 45◦.Za kružnice sa središtem u ishodištu, osam simetricnihtocaka mogu se prikazati procedurom TockeKruznice().Slucaj x = y se mora posebno riješiti.

Page 30: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

(Bresenhamov) Algoritam srednje tocke zakružnice

Bresenham je 1977 razvio inkrementalni generatorkružnica koji je efikasan.Podrazumijevamo da je središte kružnice u ishodištu.U obzir uzimamo samo 45◦ od kružice, drugi oktant zax ∈ [0,R/

√2〉 i y ∈ 〈R/

√2,R].

Koristimo proceduru TockeKuznice() za prikazivanjetocaka na cijeloj kružici.Strategija algoritma je odabir 1 od 2 pixel-a, i to onogkoji je bliži kružnici.Odabir se vrši izvrednjavanjem funkcije u srednjoj tockiizmedu ta 2 pixel-a.U drugom oktantu,

ako je pixel P = (xP , yP) bio prethodno izabran kaonajbliži kružniciizbor za sljedeci pixel je izmedu I i JI

Page 31: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

{{{

{{{

kk

kkkP = (xP , yP ) I

JI

M MI

MJI

prijašnjipixel

izbor trenut-nog pixel-a

izbor sljede-ceg pixel-a

Slika: Mreža pixel-a za algoritam srednje tocke, sa oznaženomsrednjom tockom M, i pixel-ima I i JI izmedu kojih se bira sljedeciosvjetljeni pixel.

Page 32: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Definiramo funkciju F (x , y) = x2 + y2 − R2, i za njuvrijedi:

F (x , y) = 0 na kružniciF (x , y) > 0 izvan kružniceF (x , y) < 0 unutar kružnice

Može se pokazati daako je srednja tocka M izvan kružnice, tada je pixel JIbliži kružniciako je srednja tocka M unutar kružnice, tada je pixel Ibliži kružnici

Ponovo definiramo test varijablu d kao vrijednostfunkcije F (x , y) u srednjoj tocki:

dstari = F(

xP + 1, yP −12

)= (xP+1)2+

(yP −

12

)2

−R2.

Page 33: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Ako je dstari < 0, M se pomice jedan korak u smjeru x :

dnovi = F(

xP + 2, yP −12

)= (xP + 2)2 +

(yP −

12

)2

− R2

= dstari + (2xP + 3)

∆I = 2xP + 3

Ako je dstari ≥ 0, M se pomice jedan korak u smjeru x ijedan u smjeru −y :

dnovi = F(

xP + 2, yP −32

)= (xP + 2)2 +

(yP −

32

)2

− R2

= dstari + (2xP − 2yP + 5)

∆JI = 2xP − 2yP + 5

∆I i ∆JI ovise o xP i yP , zato se P zove tockaizvrednjavanja.

Page 34: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Algoritam cemo ograniciti na cjelobrojne radijuse.Za pocetne uvjete znamo da je prvi pixel na kružici u(0,R).Sljedeca srednja tocka leži u (1,R − 1

2), zato je

F(

1,R − 12

)= 1 +

(R2 − R +

14

)− R2 =

54− R.

Dalje implementiramo algoritam slicno algoritmusrednje tocke za linije.U ovom slucaju smo prinudeni koristiti realnu aritmetikuzbog razlomka u inicijalnoj vrijednosti od d .

Page 35: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Algoritam (Algoritam srednje tocke za scan convertingkružnice)void SredtocKruznica(int r , int v) /* Pretpostavlja se da je središte kružnice u ishodištu */

{int x = 0;int y = r ;double d = 5.0/4.0− r ;TockeKruznice(x,y,v);while (y > x){

if (d < 0) /* Izaberi I */

d+ = 2.0 ∗ x + 3.0;else{ /* Izaberi JI */

d+ = 2.0 ∗ (x − y) + 5.0;y −−;

}x + +;TockeKruznice(x,y,v);

}}

Page 36: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Cjelobrojni algoritam

Kako bismo izbjegli realnu aritmetiku definiramo novutest varijablu

h = d − 14.

Tada inicijalizacija glasi h = 1− R,a test umjesto d < 0 glasi h < 1

4 .

Buduci da hna pocetku ima cjelobrojnu vrijednost,i da se inkremetira cjelobrojnim vrijednostima ∆I i ∆JI

test možemo promijeniti u

h < 0.

Ovime smo dobili cjelobrojni algoritam, u kojem cemo hopet promijeniti u d zbog konzistencije.

Page 37: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Algoritam (Cjelobrojni algoritam srednje tocke za scanconverting kružnice)void SredtocKruznica(int r , int v) /* Pretpostavlja se da je središte kružnice u ishodištu */

/* Samo cjelobrojna aritmetika */

{int x = 0;int y = r ;int d = 1− r ;TockeKruznice(x,y,v);while (y > x){

if (d < 0) /* Izaberi I */

d+ = 2 ∗ x + 3;else{ /* Izaberi JI */

d+ = 2 ∗ (x − y) + 5;y −−;

}x + +;TockeKruznice(x,y,v);

}}

Page 38: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Diferencije drugog reda

Algoritam ce biti efikasniji ako i korake ∆I i ∆JIracunamo inkrementalno.Ako u tekucem koraku izaberemo I:

odabrana tocka se pomice sa (xP , yP) na (xP + 1, yP)diferencija prvog reda u (xP , yP) je ∆Istari = 2xP + 3,zato je

u (xP + 1, yP) ∆Inovi = 2(xP + 1) + 3

diferencija drugog reda onda iznosi ∆Inovi −∆Istari = 2diferencija prvog reda u (xP , yP) je∆JIstari = 2xP − 2yP + 5, zato je

u (xP + 1, yP) ∆JInovi = 2(xP + 1)− 2yP + 5

diferencija drugog reda onda iznosi ∆JInovi −∆JIstari = 2

Page 39: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Ako u tekucemo koraku izaberemo JI:odabrana tocka se pomice sa (xP , yP) na(xP + 1, yP − 1)diferencija prvog reda u (xP , yP) je ∆Istari = 2xP + 3,zato je

u (xP + 1, yP − 1) ∆Inovi = 2(xP + 1) + 3

diferencija drugog reda onda iznosi ∆Inovi −∆Istari = 2diferencija prvog reda u (xP , yP) je∆JIstari = 2xP − 2yP + 5, zato je

u (xP + 1, yP − 1) ∆JInovi = 2(xP + 1)− 2(yP − 1) + 5

diferencija drugog reda onda iznosi ∆JInovi −∆JIstari = 4

∆I i ∆JI se inicijaliziraju u pocetnom pixel-u (0,R).

Page 40: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružniceOsmerostrukasimetrija

Algoritam srednjetocke

Obrezivanje(clipping)

Algoritam (Algoritam srednje tocke za scan convertingkružnice sa diferencijama drugog reda)void SredtocKruznica(int r , int v) /* Pretpostavlja se da je središte kružnice u ishodištu */

/* Koriste se diferencije drugog reda za racunanje inkrementa test varijable */{

int x = 0;int y = r ;int d = 1− r ;int deltaI = 3;int deltaJI = −2 ∗ r + 5;TockeKruznice(x,y,v);while (y > x){

if (d < 0) /* Izaberi I */d+ = deltaI;deltaI+ = 2;deltaJI+ = 2;

else{ /* Izaberi JI */d+ = deltaJI;deltaI+ = 2;deltaJI+ = 4;y −−;

}x + +;TockeKruznice(x,y,v);

}}

Page 41: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Obrezivanje (clipping)

Korisnik može interaktivno mijenjati položaj i velicinuprozora u kojem se prikazuje grafika.Zbog toga se cesto dogada da se slika u prozoru nemože u potpunosti prikazati, vec se vidi samo jedannjen dio.Zato se vrši obrezivanje (clipping) primitiva kako bi seprikazao samo onaj dio koji stane u prozor, tj. diounutar pravokutnika za obrezivanje.Važno je da se i scan converting i obrezivanje obavljašto je brže moguce.Obrezivanje se može vršiti:

analitickiistovremeno sa scan converting algoritmom

Page 42: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Analiticko obrezivanje:najprije se izracunaju osnovni parametri obrezaneprimitive (kao npr. krajnje tocke linije), a nakon toga seprimijenjuje scan converting algoritam s novimparametrimaefikasno za realni koordinatni sustav — za cjelobrojnugrafiku treba još izvršiti dodatno rastersko obrezivanjejednostavno za obrezivanje linija i poligona — obratitiposebnu pažnju na inicijalizaciju test varijable

Obrezivanje istovremeno sa scan convertingalgoritmom

svaki pixel primitive se podvrgava testu da li se nalaziunutar pravokutnika za obrezivanjeprakticno za popunjene i debele primitive —provjeravaju se samo rubni pixel-iefikasno za slucajeve kada je prikaz primitive malo veciod pravokutnika za obrezivanje

Page 43: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Obrezivanje linija

Linije se obrezuju analiticki.Algoritam za obrezivanje linija može se koristiti i zaobrezivanje poligona.Linija koje sijece pravokutnik za obrezivanje se ponovosvodi na jednu liniju:

ako linija leži unutar pravokutnika prikazuje se upotpunostiako sijece barem jedan rub pravokutnika prikazuje seobrezana linijaako linija leži na samoj granici pravokutnika prikazuje seako linija leži izvan pravokutnika ne prikazuje se

Za obrezivanje linije potrebno je provjeriti samo njenekrajnje tocke:

tocka (x , y) leži unutar pravokutnika omedenogkoordinatnim pravcima xmin i xmax , te ymin i ymax ako isamo ako

xmin ≤ x ≤ xmax , i ymin ≤ y ≤ ymax .

Page 44: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

�������

s

s

���ss ����

ss

s�����

ss

ss

������

s

ss sA

B C

D

D′

E

F

G

H

G′

H′

I

J

K L

pravokutnikza obrezivanje

������

(a)

���ss ��ss���s

ss sA

B C

D′

G′

H′

K L

(b)

Slika: Slucajevi obrezivanja linija.

Page 45: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Cohen–Sutherlandov algoritam

Vrši se provjera krajnjih tocaka:1 trivijalno prihvacanje — obje krajnje tocke su unutar

pravokutnika za obrezivanje2 trivijalno odbijanje — obje krajnje tocke nalaze se u

vanjskoj poluravnini definiranoj jednim od rubovapravokutnika za obrezivanje

3 ako niti jedan uvjet nije zadovoljen — sjecište linije ipravca definiranog rubom pravokutnika dijeli liniju nadva segmenta, tako da se barem jedan segment možeodbaciti

segment se iterativno obrezuje, provjerom za trivijalnoprihvacanje ili odbijanjeako niti jedan uvjet nije zadovoljen segment se daljedijeli na podsegmenteto se radi tako dugo dok ono što ostane nije upotpunosti unutar pravokutnika, ili se može trivijalnoodbaciti

Page 46: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Za provodenje provjere trivijalnog prihvacanja i odbijanjapromatramo pravce koji su definirani rubovimapravokutnika za obrezivanje — oni dijele ravninu u 9podrucjasvakom podrucju je dodijeljen 4-bitni kodkod je odreden položajem podrucja u odnosu navanjske poluravnine definirane rubovima pravokutnikasvaki bit koda postavljen je na 1 (istina) ili 0 (laž)4 bita u kodu zadovoljavaju sljedece uvjete:

1. bit vanjska poluravnina gornjeg ruba, iznad gornjeg ruba y > ymax

2. bit vanjska poluravnina donjeg ruba, ispod donjeg ruba y < ymin

3. bit vanjska poluravnina desnog ruba, desno od desnog ruba x > xmax

4. bit vanjska poluravnina lijevog ruba, lijevo od lijevog ruba x < xmin

Page 47: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

0101 0100 0110

0001 0000 0010

1001 1000 1010

pravokutnikza obrezivanje

����

�1

Slika: Kodovi podrucja.

Page 48: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Detalji algoritma:Svakoj krajnjoj tocki linije pridružuje se kod podrucja ukojem leži.Ako su oba koda krajnjih tocaka jednaki nuli, tada linijau potpunosti leži unutar pravokutnika za obrezivanje —linija se trivijalno prihvaca.Ako oba koda imaju postavljenu 1 na istom bitu, tadalinija u potpunosti leži u vanjskoj poluravnini rubaodredenog tim bitom — linija se trivijalno odbija.Ako se linija ne može trivijalno prihvatiti niti odbiti,vršimo podjelu na 2 segmenta:

rub kojeg linija sijece dijeli liniju na dva dijeladio koji leži u vanjskoj poluravnini ruba se odbacujeporedak provjere rubova je proizvoljan — mi cemoprovjeravati

gornji donji desni lijevi

Page 49: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

U slucaju da uvjeti prihvacanja i odbijanja nisu zadovoljeni,tada su osnovna svojstva koda pridruženog krajnjoj tocki:

bitovi koji su postavljeni na 1 odgovaraju rubovima kojelinija sijeceako jedna krajnja tocka leži u vanjskoj poluravnininekog ruba, tada druga krajnja tocka mora ležati uunutarnjoj poluravnini tog rubazbog toga linija mora sijeci taj rubalgoritam uvijek bira krajnju tocku koja leži izvanpravokutnika,

iz koda te krajnje tocke odreduje rub kojeg linija sijecetaj rub je prvi u zadanom poretku ciji je bit postavljen na1to je najljeviji bit u kodu postavljen na 1

Page 50: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Sažetak algoritma:1 Izracunamo kodove od oba dvije krajnje tocke.2 Provjerimo uvjete za trivijalno prihvacanje i odbijanje.3 Ako obje provjere nisu zadovoljene, tada tražimo tocku

koja leži izvan pravokutnika.4 Provjeravamo kod vanjske tocke kako bi odredili rub

kojeg linija sijece.5 Nalazimo sjecište linije i tog ruba.6 Odrežimo segment od vanjske tocke do sjecišta, time

što cemo vanjsku krajnju tocku zamijeniti sjecištem.7 Izracunamo kod nove krajnje tocke, kako bismo se

pripremili za sljedecu iteraciju.

Page 51: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

HHHH

HHH

HHH

H

ssss

����������

s s ss

sA

B

C

D

E

F

G

H

I

pravokutnikza obrezivanje

������:

Slika: Ilustracija Cohen–Sutherlandovog obrezivanja linija.

Page 52: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Zbog toga što se provjera i obrezivanje vrši u fiksnomporetku, algoritam ce ponekad izvesti nepotrebnaobrezivanja.Nepotrebna obrezivanja se dogadaju kada se sjecištelinije i pravca odredenog rubom nalazi izvan samogpravokutnika za obrezivanje (tocka H u prethodnomprimjeru).Ovaj algoritam nije najefikasniji, ali je jednostavan inajviše se koristi.Lako ga je proširiti na 3D.

Page 53: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Algoritam (Cohen–Sutherlandov algoritam za obrezivanjelinija)typedef unsigned int kodovi;enum { GORNJI = 0x1, DONJI = 0x2, DESNI = 0x4, LIJEVI = 0x8};

void CohenSutherlandAlg( /* Cohen–Sutherlandov algoritam za obrezivanje linije */double x0, double y0, double x1, double y1, /* od P0 = (x0, y0) do P1 = (x1, y1) i za pravokutnik */double xmin, double xmax, double ymin, /* za obrezivanje sa dijagonalom od (xmin, ymin) do */double ymax, int v) /* (xmax, ymax) */

{kodovi kod0, kod1, kodVan; /* Kodovi za P0, P1 i pomocnu vanjsku tocku */boolean prihvati = FALSE, gotovo = FALSE;kod0 = IzracunajKod(x0, y0, xmin, xmax, ymin, ymax);kod1 = IzracunajKod(x1, y1, xmin, xmax, ymin, ymax);do {

if (!(kod0 | kod1)){ /* Trivijalno prihvacanje i izlaz */prihvati = TRUE; gotovo = TRUE;

} else if (kod0 & kod1) /* Trivijalno odbijanje i izlaz */gotovo = TRUE;

else { /* Oba dva uvjeta nisu zadovoljena, izracunaj segment */double x,y; /* linije za odrezati: od vanjske tocke do sjecišta s rubom */kodVan = kod0 ? kod0 : kod1; /* Bar jedna krajnja tocka je izvan pravokutnika; odaberi ju *//* Sada nadi sjecište; koristi formule y = y0 + k ∗ (x − x0), x = x0 + (1/k) ∗ (y − y0). */if (kodVan & GORNJI){ /* Razdijeli liniju kod gornjeg ruba pravokutnika /*

x = x0 + (x1− x0) ∗ (ymax − y0)/(y1− y0);y = ymax;

Page 54: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Algoritam (Cohen–Sutherlandov algoritam za obrezivanjelinija — nastavak)

} else if (kodVan & DONJI){ /* Razdijeli liniju kod donjeg ruba pravokutnika */x = x0 + (x1− x0) ∗ (ymin − y0)/(y1− y0);y = ymin;

} else if (kodVan & DESNI){ /* Razdijeli liniju kod desnog ruba pravokutnika */y = y0 + (y1− y0) ∗ (xmax − x0)/(x1− x0);x = xmax;

} else { /* Razdijeli liniju kod lijevog ruba pravokutnika */y = y0 + (y1− y0) ∗ (xmin − x0)/(x1− x0);x = xmin;

}/* Sada pomicemo vanjsku tocku do sjecišta i obrezujemo; pripremamo se za sljedecu iteraciju */if (kodVan == kod0){

x0 = x; y0 = y; kod0 = IzracunajKod(x0, y0, xmin, xmax, ymin, ymax);} else {

x1 = x; y1 = y; kod1 = IzracunajKod(x1, y1, xmin, xmax, ymin, ymax);}

}} while (gotovo == FALSE);if (prihvati)

SredtocLinijaReal(x0, y0, x1, y1, v); /* Verzija za double koordinate */}

Page 55: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Algoritam (Cohen–Sutherlandov algoritam za obrezivanjelinija — nastavak)kodovi IzracunajKod(

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

kodovi kod = 0;if (y > ymax)

kod | = GORNJI;else if (y < ymin)

kod | = DONJI;if (x > xmax)

kod | = DESNI;else if (x < xmin)

kod | = LIJEVI;return kod;

}

Page 56: Osnovni algoritmi rasterske grafike za crtanje 2D primitivanela/rgpredavanja/osnove_rasterske... · mogucnost crtanja linija debljih od 1 pixel-a,

Osnovnialgoritmirasterskegrafike zacrtanje 2Dprimitiva

Nela Bosner

Reprezentacijapixel-a

Scanconverting zalinije

Scanconverting zakružnice

Obrezivanje(clipping)Obrezivanje linija

Domaca zadacaNapišite program koji ucitava koordinate n tocaka, te xmin,xmax , ymin i ymax koordinate pravokutnika za obrezivanje.Program treba nacrtati poligon zadan tim tockama pomocualgoritma srednje tocke za linije, koji je pravilno obrezanzadanim pravokutnikom za obrezivanje.