[The link bar feature is not available in this web]  ||| Natrag: Projekcije | Gore: Matematički temelji računarske grafike | Naprijed: Crtanje površina |

 

Crtanje primitivnih oblika

Prikazivanje slika objekata na rasterskim prikaznim uređajima zahtijeva pretvorbu idealnih slika u rasterski prikaz (scan conversion) s pikselima kao osnovnim elementima prikaza. Izgled, dimenzije i međusobni odnos piksela se razlikuju u pojedinim sustavima. U našim razmatranjima možemo prihvatiti aproksimaciju oblika piksela kao kružića sa središtem na sjecištima horizontalnih i vertikalnih pravaca koji tvore rešetku (koordinate sjecišta su cjelobrojne). Postupak pretvorbe idealne slike u rasterski prikaz podrazumijeva određivanje razine svjetloće i/ili boju piksela u rasteru. Budući da se ova pretvorba obavlja svaki put kad treba prikazati neku sliku (ako nije u cijelosti pohranjena u memoriji), cilj je iznaći i primijeniti takve pretvorbene algoritme koji zahtijevaju minimalan broj procesorskih operacija. Pri tome je važno  korištenje cjelobrojne aritmetike i inkrementalnih metoda kod kojih se pretvorba odvija piksel po piksel (uz korištenje rezultata proračuna za prethodni piksel).

 

Rasterski prikaz ravnih crta

Algoritmi za rasterski prikaz ravnih crta proračunavaju koordinate piksela na 2D rasteru koji su najbliži idealnoj, beskonačno uskoj ravnoj crti.  Poželjne značajke prikazane ravne crte uključuju:

Osnovni je problem crtanje kose ravne crte širine jednog piksela na dvorazinskom rasterskom prikaznom uređaju. Za tu svrhu razvijen je niz algoritama s ciljem pojednostavljenja i ubrzanja postupka.

Osnovni inkrementalni algoritam

Najjednostavniji pristup temelji se na proračunu piksel po piksel na osnovi eksplicitnog oblika jednadžbe pravca.

Algoritam se sastoji od sljedećih koraka:

Funkcija Round zaokružuje vrijednost realnog broja na najbliži cijeli broj. Ona se može realizirati pomoću funkcije Floor koja pretvara realni broj u cijeli broj odbacivanjem decimalnog dijela. 

Osnovni inkrementalni algoritam odabire točke koje su najmanje udaljene od idealne crte.  Ovaj algoritam nije učinkovit jer se u svakoj iteraciji obavljaju operacije množenja i zbrajanja s realnim ili (racionalnim) brojevima kao i poziv funkcije Floor.

Primjer:

Primjenom osnovnog inkrementalnog algoritma odredite niz piksela koji aproksimiraju ravnu crtu povezuje točke (5,8) i (10,11).

Slika 3.8  Primjer primjene osnovnog inkrementalnog algoritma.

*Digitalni diferencijalni analizator

Nedostatci osnovnog inkrementalnog algoritma mogu se velikim dijelom otkloniti ako se algoritam izmijeni na način da se izbjegne množenje realnih brojeva (koje predstavlja vrlo zahtjevnu operaciju za procesor).

Množenje se može izbjeći ako se izraz za proračun vrijednosti koordinate y napiše na sljedeći način:
        yi+1 = m xi+1 + B = m (xi+Dx) + B = yi + m Dx
Uz  izbor Dx = 1  slijedi:
        yi+1 = yi + m
Ako je |m| > 1 mijenjaju se uloge x i y koordinata u algoritmu:
        Dy = 1
        Dx = Dy/m = 1/m

Na taj način vrijednosti x i y koordinata se povećavaju u malim koracima za vrijednost 1 ili -1 < m < 1. Ovakav algoritam naziva se digitalni diferencijalni analizator (DDA). DDA u osnovi predstavlja algoritam za numeričko rješavanje diferencijalnih jednadžbi istovremenim uvećavanjem koordinata x i y za vrijednosti proporcionalne njihovim prvim derivacijama. Nedostatak ovog algoritma proizlazi iz nepreciznosti prikaza realnih brojeva u digitalnim procesorima. Dodavanje ne sasvim točne vrijednosti unosi kumulativnu pogrešku i otklon od stvarne vrijednosti (za kratke crte razina pogreške je prihvatljiva).

*Algoritmi temeljeni na cjelobrojnoj aritmetici

Računska složenost DDA algoritma, iako je značajno smanjena u odnosu na osnovni inkrementalni algoritam, još uvijek nije optimalna jer sadrži operacije s realnim brojevima. Daljnji napredak na ovom području ostvaren je razvitkom algoritama koji su temeljeni na cjelobrojnoj aritmetici. Značajnu ulogu u tom razvitku ima Bresenhamov algoritam utemeljen na inkrementalnoj tehnici. Ta tehnika daje najbolju aproksimaciju idealnih crta u smislu minimizacije pogrješke (odnosno udaljenosti odabranih točaka od idealnih crta), a može se primjeniti i na crtanje kružnica. Poboljšane inačice ovog algoritma temelje se na primjeni tehnike središnje točke (Pitteway, Van Aken). Međutim za slučaj crtanja ravnih crta i ove formulacija svode se na Bresenhamovu formulaciju.

U formulaciji algoritma središnje točke pretpostavlja se da je nagib pravca između 0 i 1. Za pravce s nagibima izvan ovog intervala primjenjuje se tehnika zrcaljenja oko koordinatnih osi. Pravac se preslikava u odgovarajući pravac s nagibom unutar navedenog intervala čime se omogućava primjena algoritma središnje točke. Na kraju se aproksimacija dijela pravca  definirana primjenom algoritma zrcali u obrnutom smjeru.

Označimo donju lijevu točku koordinatama (x0,y0), a gornju desnu točku koordinatama (x1,y1). Pretpostavimo da je posljednja odabrana točka P s koordinatama (xp,yp) te da je potrebno odabrati sljedeću desnu točku. Odabir se svodi na izbor između dviju mogućih točaka: susjedne točke D do koje se dolazi pomakom udesno za jedan i točke GD do koje se dolazi pomakom za jedan udesno i za jedan prema gore. Potrebno je odrediti koja od te dvije točke je bliža idealnom pravcu. Označimo s T točku sjecišta idealnog pravca s dužinom koja povezuje točke D i GD. Izbor sljedeće točke svodi se na određivanje kojoj je od te dvije točke bliža točka T. U Bresenhamovoj formulaciji algoritma izračunava se razlika udaljenosti točke T do točke D i do točke GD te se na temelju predznaka rezultata određuje koja je od tih dviju točaka bliža idealnom pravcu.

*Algoritam središnje točke

U formulaciji temeljenoj na središnjoj točci taj se postupak odvija na drugačiji način. Prvo se definira središnja točka S(xp+1, yp+1/2) kao točka polovišta dužine koja povezuje točke D i GD. Odluka se donosi na temelju informacije o položaju središnje točke u odnosu na idealni pravac. Ako je središnja točka S ispod idealnog pravca onda je očito točka GD bliža idealnom pravcu. Ako je središnja točka S iznad središnje točke onda je točka D bliža idealnom pravcu.

Da bi se ovaj postupak odvijao na učinkovit način definira se varijabla odluke d koja se rekurzivno izračunava od koraka do koraka. Na temelju predznaka varijable odluke određuje se sljedeća točka. U svakom koraku algoritam vrši izbor između dvije točke na temelju predznaka varijable odluke te uvećava varijablu odluke za jednu od dvije moguće vrijednosti u ovisnosti o izabranoj točki.

U nastavku je formuliran algoritam za crtanje ravne crte temeljen na tehnici središnje točke.

Nagib idealnog pravca koji povezuje točke (x0,y0) i (x1,y1), uz uvjet: 0<m<1 ( za druge vrijednosti m primjenjuje se zrcaljenje oko glavnih osi), može se odrediti na sljedeći način:
        m = dy/dx
gdje je dy = y1 - y0  i  dx = x1 - x0.
Eksplicitni oblik jednadžbe pravca tada se može napisati u sljedećem obliku:
        y = (dy/dx) x + B
a implicitni oblik jednadžbe pravca u sljedećem obliku:
        F(x,y) = ax + by + c = 0
gdje je a = dy,    b = -dx,   c = B dx.
Na temelju svojstava implicitnog oblika jednadžbe pravca poznato je da vrijede sljedeći odnosi između točke i pravca:
        F(x,y) = 0  => točka  je na pravcu
        F(x,y) < 0  => točka je ispod pravca
        F(x,y) > 0  => točka je iznad pravca
Očito je da vrijednost F(x,y) gdje su x i y koordinate središnje točke S(xp+1, yp+1/2) možemo koristiti kao varijablu odluke.
Varijabla odluke definirana je na sljedeći način:
        d = F(S) = F(xp+1, yp+1/2) = a(xp+1) + b(yp+1/2) + c
U ovisnosti o predznaku varijable odluke algoritam se  na sljedeći način:
1.a. Ako je d > 0  => izbor točke GD;
2.a. Nova vrijednost varijable odluke bit će u tom slučaju dn =  d + DD ;
(Objašnjenje: varijabla odluke je dn = F(xp+2, yp+1/2) = a(xp+2) + b(yp+1/2) + c, a promjena varijable odluke  DD = dn - d = a = dy)
        1.b. Ako je d < 0  => izbor točke D ;
        2.b. Nova vrijednost varijable odluke bit će u tom slučaju dn =  d + DGD ;
(Objašnjenje: varijabla odluke je dn = F(xp+2, yp+3/2) = a(xp+2) + b(yp+3/2) + c,  a promjena varijable odluke DGD = dn - d = a + b = dy - dx).
Ako je d = 0 izbor između dvije točke je proizvoljan jer su obje jednako udaljene od idealnog pravca.

Ako se zna da je prva točka lijeva početna točka (x0,y0), a prva središnja točka (x0+1, y0+1/2) tada se može odrediti prva vrijednost varijable odluke: d = a + b/2. Zbog razlomka b/2 prikladno je umjesto F(S) koristiti 2F(S) u formulaciji algoritma. Time se osigurava da algoritam koristi isključivo cijele brojeve.

Primjer:

Primjenom algoritma središnje točke odredite niz piksela koji aproksimiraju ravnu crtu koja povezuje točke (5,8) i (10,11).          

Slika 3.9  Primjer primjene  algoritma središnje točke za crtanje ravne crte.

Ispunjavanje primitivnih oblika

Mogućnost ispunjavanja primitivnih oblika kao što su pravokutnici, kružnice, elipse i mnogokuti značajno doprinosi vrijednosti i primjenjivosti grafičkog sustava. Pri tome je moguće ispunjavanje bojom ili određenim uzorkom. Osnovni koraci u tom postupku su:

Izbor piksela koje treba ispuniti odvija se u sljedećim koracima:

U slučaju ispunjavanja primitivnog oblika bojom odabranim pikselima pridjeljuje se prethodno odabrana konstantna vrijednost. Način ispunjavanja mnogokutnog oblika bojom ilustriran je na slici 3.10. U slučaju ispunjavanja primitivnog oblika uzorkom algoritam se upotpunjuje dijelom koji upravlja izborom vrijednosti pojedinog piksela. Vrijednosti pojedinih piksela preuzimaju se određenim redoslijedom iz dijela memorije u kojem je definiran uzorak.

Slika 3.10  Primjer ispunjavanja mnogokutnog oblika bojom.

Crtanje krivulja

Mnogi objekti iz stvarnog svijeta, ali i iz virtualnih svjetova, koje se prikazuje primjenom računarske grafike omeđeni su glatkim krivuljama ili plohama. Najčešći je slučaj da egzaktan matematički model takvog objekta ne postoji ili je presložen za primjenu u stvarnom vremenu. Stoga je nužno kreirati približan matematički model koji omogućava grafičko predstavljanje objekta na zadovoljavajući način.

Najjednostavniji pristup modeliranju krivulje je linearna aproksimacija (prvog reda) po dijelovima (Slika 3.11). Krivulja se aproksimira višestrukim crtama (niz povezanih ravnih crta) ili mnogokutima. Točnost aproksimacije određena je brojem linearnih segmenata kojima se aproksimira pojedini dio krivulje. Za visoku razinu podudarnosti linearnog aproksimacijskog modela i željene krivulje potreban je velik broj linearnih segmenata.

Slika 3.11 Primjer modeliranja krivulje linearnim segmentima.

Veća razina podudarnosti odnosno bolja aproksimacija uz manji broj pojedinačnih segmenata može se ostvariti primjenom aproksimacija višeg reda. Na taj način smanjuje se potrebna količina memorije i olakšava interaktivni rad pri modeliranju. Najčešće se koriste aproksimacije trećeg reda jer aproksimacije nižeg reda ne daju dovoljno fleksibilnosti za oblikovanje različitih krivulje, a aproksimacije višeg reda su računski zahtjevnije i složenije za primjenu.

Postoji više oblika matematičkog prikaza krivulja za aproksimacije višeg reda: eksplicitni, implicitni i parametarski.

U slučaju primjene eksplicitnog oblika koordinate y i z izražene su kao eksplicitne funkcije koordinate x: y=y(x) , z=z(x). Nedostatci ovog oblika u primjenama računarske grafike su sljedeći:

  • nisu moguće višestruke vrijednost x (kao npr. kod kružnica),

  • nije sačuvana rotacijska invarijantnost (nije jednostavno rotirati krivulju),

  • teškoće s vertikalnim tangentama (zbog beskonačnog iznosa nagiba).

 

U slučaju primjene implicitnog oblika jednadžba krivulje ima oblik f(x,y,z)=0. Nedostatci implicitnog oblika u primjenama računarske grafike su sljedeći:

  • problem s višestrukim rješenjima (potrebno je postavljati dodatne uvjete za izbor željenog rješenja),

  • problem s kontinuitetom tangenti u dodirnim točkama različitih segmenata (podudarnost smjera).

 

U slučaju primjene parametarskog oblika jednadžbe krivulje sve tri koordinate izražene su kao funkcije parametra t: x=x(t), y=y(t), z=z(t).

Parametarski oblik jednadžbe krivulje nema prethodne navedene nedostatke eksplicitnog i implicitnog oblika te je stoga najprikladniji za modeliranje krivulja u računarskoj grafici.

Parametarske krivulje trećeg reda

Parametarske krivulje trećeg reda najčešće se koriste za modeliranje krivulja u računarskoj grafici jer omogućavaju dovoljno fleksibilnosti za oblikovanje različitih krivulje uz prihvatljivu razinu složenosti. Model krivulje se specificira po odsječcima polinomima trećeg reda. Svaki odsječak Q opisan je s tri funkcije (polinoma trećeg reda) x, y i z parametra t na sljedeći način: Q(t) = [x(t) y(t) z(t)] gdje je

        x(t) = ax t3 + bx t2 + cx t + dx
        y(t) = ay t3 + by t2 + cy t + dy
        z(t) = az t3 + bz t2 + cz t + dz
        uz 0 ≤ t ≤ 1.

Ako definiramo vektor potencija parametra t na sljedeći način:

        T = [ t3  t2  t  1]

te matricu koeficijenata triju polinoma na sljedeći način:

       

tada možemo pisati izraz za model odsječka krivulje u sažetom obliku

        Q(t) = T C.

Definicija odsječka krivulje Q(t)

Polinom trećeg stupnja kao model odsječka krivulje ima 4 nepoznata koeficijenta što zahtijeva 4 uvjeta za njihovo određivanje. Na taj način dobija se sustav od ukupno 4 jednadžbe s 4 nepoznanice. Uvjeti mogu biti: krajnje točke, vektor smjera tangente ili kontinuitet u točkama dodira pojedinih odsječaka.

S obzirom na izbor vrste uvjeta definirane su različite vrste krivulja. Osnovne vrste krivulja su:

  • Hermiteove krivulje (uvjeti su: dvije krajnje točke i dva vektora smjera u krajnjim točkama),

  • Bezierove krivulje (uvjeti su: dvije krajnje točke i dvije dodatne točke koje određuju vektore smjera u krajnjim točkama),

  • B-krivulje i b-krivulje (uvjeti su: četiri kontrolne točke).

Hermiteove krivulje i Bezierove krivulje zadovoljavaju kriterije G1 i C1 kontinuiteta uz određene uvjete, dok B-krivulje i b-krivulje zadovoljavaju kriterije C1 i C2 kontinuiteta.

Matrica koeficijenata C može se izraziti kao umnožak bazne matrice M i geometrijskog vektora G koji sadrži zadane geometrijske uvjete (npr. koordinate točaka):

        C = M G

Izraz za parametarski model odsječka krivulje tada možemo napisati na sljedeći način:

        Q(t) = T M G

Promatramo li samo jednu komponentu vektora Q(t) npr. x(t) dobivamo sljedeći izraz:

        x(t) = T M Gx

Označimo li umnožak vektora T i matrice M s B (B=TM) možemo pisati :

        Q(t) = B G

Elementi matrice B su polinomi trećeg reda parametra t. Na taj način vidimo da je krivulja predstavljena kao težinski zbroj elemenata geometrijskog vektora, gdje su težinski faktori polinomi parametra t.

Za svaku pojedinu vrstu krivulja definirana je bazna matrica M i geometrijski vektor G.

 

Bezierove krivulje

Bezierove krivulje definirane su sljedećim geometrijskim uvjetima:

Pomoću dviju kontrolnih točaka posredno su definirani vektori smjera tangenti R1 i R4 u dvjema krajnjim točkama. Vektor smjera tangente u početnoj točci odgovara derivaciji krivulje Q(t) za vrijednost parametra t=0, dok  vektor smjera tangente u krajnjoj točci odgovara derivaciji krivulje Q(t) za vrijednost parametra t=1:

        R1 = Q’(0) = 3(P2-P1)

        R4 = Q’(1) = 3(P4-P3)

Elementi geometrijskog vektora su četiri zadane točke. Geometrijski vektor za Bezierove krivulje definiran je na sljedeći način:

       

Bazna matrica za Bezierove krivulje definirana je na sljedeći način:
       

Imajući u vidu da je odsječak krivulje opisan izrazom:

        Q(t) = T MB GB

uvrštenjem bazne matrice i geometrijskog vektora dobivamo sljedeći oblik jednadžbe odsječka Bezierove krivulje:

        Q(t) = (1-t)3 P1 + 3t (1-t)2 P2 + 3t2 (1-t) P3 + t3 P4

Polinomi koji predstavljaju koeficijente pojedinih točaka u ovom izrazu nazivaju se Bernsteinovi polinomi. Na slici 3.13 a) prikazan je primjer crtanja odsječka Bezierove krivulje, a na slici 3.13 b) primjer dvaju spojenih odsječaka Bezierovih krivulja.

a)

 

b)

Slika 3.13 a) Primjer crtanja odsječka Bezierove krivulje,  b) Primjer dvaju spojenih odsječaka Bezierovih krivulja.

Uvjet za G1 kontinuitet jest da točke P3, P4 i P5 moraju biti različite i kolinearne

        P3 - P4 = k (P4 - P5),   k > 0

Uvjet  za C1 kontinuitet jest da je k = 1.

*Pretvorba oblika krivulja

Sve skupine krivulja predstavljene matričnim umnoškom Q(t)=TMG moguće je međusobno pretvarati iz jednih u druge npr. krivulje predstavljenu baznom matricom M1 i geometrijskim vektorom G1 moguće je predstaviti drugom baznom maticom M2 i odgovarajućim geometrijskim vektorom G2.  Važno je da mora biti ispunjen uvjet:

        M2 G2= M1 G1

Nepoznati geometrijski vektor G2 može se izračunati na sljedeći način:

        G2 =  M2-1M1 G1

Na taj način može se npr. krivulja predstavljena baznom matricom i geometrijskim vektorom za Hermiteove krivulje transformirati u prikaz baznom matricom i geometrijskim vektorom za Bezierove krivulje. Različite vrste krivulja imaju različite prednosti za pojedine vrste primjena. Prednosti različitih vrsta krivulja mogu se najbolje iskoristiti u kombiniranom načinu prikaza krivulja. Često se krivulja se predstavlja korisniku putem sučelja kao Bezierova ili Hermiteova, dok je unutrašnja reprezentacija B-krivulja. Npr. u PostScript-u se krivulje predstavljaju korisniku kao Hermiteove dok im je unutrašnja predstava Bezierova.

Kriteriji za izbor vrste krivulje uključuju:

  • prikladnost za interaktivnu manipulaciju,

  • stupanj kontinuiteta,

  • općenitost,

  • brzinu proračuna.

Bezierove i Hermiteove krivulje posebice su prikladne za interaktivnu manipulaciju zbog razumljivosti djelovanja korisnika putem kontrolnih točaka i vektora tangenti. B-krivulje prikladne su za unutarnje predstavljanje krivulja zbog svoje općenitosti.

*Načini crtanja parametarskih krivulja

Postupak crtanja parametarskih krivulja uključuje određivanje diskretnog skupa točaka na modelu krivulje i iscrtavanje ravnih crta koje ih povezuju. Pri tome su mogući različiti pristupi uključujući:

Iterativni proračun odvija se na način da se vrijednosti koordinanata x(t), y(t), i z(t) pojedinih točaka izračunavaju za niz vrijednosti parametra t međusobno udaljenih za unaprijed određeni konstantan iznos d. Proračunate točke spajaju se ravnim crtama. Problem ovakvog pristupa je u tome što se unaprijed treba odrediti razmak točaka s obzirom na parametar t. Prevelik razmak rezultira slabom kvalitetom aproksimacije dok premalen razmak rezultira nepotrebnim proračunskim opterećenjem. Izravnom primjenom ovog pristupa za Bezierove krivulje potrebno je 9 množenja i 10 zbrajanja po točci. Međutim algoritam se može numerički optimizirati te svesti na svega 9 zbrajanja po točci.

Rekurzivna podjela odvija se na način da se između dvije izračunate točke umeće treća točka. Rekurzivna podjela zaustavlja se adaptivno kada odsječak krivulje postane dovoljno ravan da se može aproksimirati ravnom crtom. Pojedinosti postupka različite su za pojedine vrste krivulja. Ovaj pristup je posebice prikladan za Bezierove krivulje. Na taj način postiže se računska složenost od 6 zbrajanja i 6 posmaka. Kriterij ravnoće je da udaljenosti unutarnjih kontrolnih točaka do spojnice krajnjih točaka moraju biti manje od zadane vrijednosti (slika 3.14). Prednost ovog pristupa je u tome što se izbjegavaju nepotrebni proračuni, a nedostatak je što se mora ispitivati ravnoća pojedinih dijelova.

Slika 3.14  Primjer primjene kriterija ravnoće pri rekurzivnom pristupu crtanju Bezierovih krivulja.

Hibridni pristup kombinira najbolja svojstva iterativnog i rekurzivnog pristupa. U osnovi se može opisati kao iterativni proračun s adaptivnim korakom.  

*Glatkoća krivulje na spoju odsječaka

Cjeloviti model željene krivulje tvori se sastavljanjem modela pojedinih odsječaka. Razina glatkoće krivulje na spoju dvaju odsječaka izražava se u smislu dviju vrsta kontinuiteta:

  • geometrijskog kontinuiteta G,

  • parametarskog kontinuiteta C.

Geometrijski kontinuitet definiran je na sljedeći način:

Izraz za vektor smjera tangente može se izračunati deriviranjem izraza za Q(t)

        .

Parametarski kontinuitet definiran je na sljedeći način:

Odnos parametarskog i geometrijskog kontinuiteta može se sažeti na sljedeći način:
        C1 => G1
tj. parametarski kontinuitet implicira geometrijski kontinuitet, dok obrat općenito ne vrijedi.

Na slici 3.12 ilustrirani su primjeri krivulja različitih razina glatkoće izraženih u smislu parametarskog kontinuiteta.

Slika 3.12  Ilustracija parametarskog kontinuiteta C0 , C1 i C2.

 


Povratak na: Početak stranice | Sadržaj

[The link bar feature is not available in this web]  ||| Natrag: Projekcije | Gore: Matematički temelji računarske grafike | Naprijed: Crtanje površina |