Luento 3: Tulostusprimitiivien toteutus

Samankaltaiset tiedostot
Luento 2: Viivan toteutus

Luento 6: Tulostusprimitiivien toteutus

Sisältö. Luento 2: Tulostusprimitiivien toteutus GRAAFISTEN PRIMITIIVIEN TOTEUTUS. Piirtäminen rasteriruudulle. Suoran viivan vaatimukset

Luento 2: 2D Katselu. Sisältö

Luento 2: Tulostusprimitiivit

Sisältö. Luento 6: Piilopinnat. Peruskäsitteet (jatkuu) Peruskäsitteitä. Yksinkertaisia tapauksia. Yksinkertaiset tapaukset jatkuu

Luento 3: 2D Katselu. Sisältö

Grafiikka 205. Tässä luvussa käsitellään geometriaa ja graafisia kohteita. Mukana on pääosin alkeisoperaatioita.

2 Pistejoukko koordinaatistossa

Luento 6: Piilopinnat ja Näkyvyys

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Tekijä Pitkä matematiikka Pisteen (x, y) etäisyys pisteestä (0, 2) on ( x 0) Pisteen (x, y) etäisyys x-akselista, eli suorasta y = 0 on y.

Vanhoja koetehtäviä. Analyyttinen geometria 2016


origo III neljännes D

Käy vastaamassa kyselyyn kurssin pedanet-sivulla (TÄRKEÄ ensi vuotta ajatellen) Kurssin suorittaminen ja arviointi: vähintään 50 tehtävää tehtynä

Tekijä Pitkä matematiikka

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A)

Suorat ja tasot, L6. Suuntajana. Suora xy-tasossa. Suora xyzkoordinaatistossa. Taso xyzkoordinaatistossa. Tason koordinaattimuotoinen yhtälö.

MAB3 - Harjoitustehtävien ratkaisut:

Yleistä vektoreista GeoGebralla

x 5 15 x 25 10x 40 11x x y 36 y sijoitus jompaankumpaan yhtälöön : b)

Numeeriset menetelmät

Juuri Kertaus Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

Tekijä Pitkä matematiikka Suoran pisteitä ovat esimerkiksi ( 5, 2), ( 2,1), (1, 0), (4, 1) ja ( 11, 4).

Ympyrä 1/6 Sisältö ESITIEDOT: käyrä, kulma, piste, suora

Suora 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste

Luento 6: Geometrinen mallinnus

Ota tämä paperi mukaan, merkkaa siihen omat vastauksesi ja tarkista oikeat vastaukset klo 11:30 jälkeen osoitteesta

4. Esittäminen ja visualisointi (renderöinti)

y=-3x+2 y=2x-3 y=3x+2 x = = 6

Matikkaa KA1-kurssilaisille, osa 3: suoran piirtäminen koordinaatistoon

Paraabeli suuntaisia suoria.

Oppimateriaali oppilaalle ja opettajalle : GeoGebra oppilaan työkaluna ylioppilaskirjoituksissa 2016 versio 0.8

Muutoksen arviointi differentiaalin avulla

MS-A0202 Differentiaali- ja integraalilaskenta 2 (SCI) Luento 1: Parametrisoidut käyrät ja kaarenpituus

yleisessä muodossa x y ax by c 0. 6p

Avaruuden kolme sellaista pistettä, jotka eivät sijaitse samalla suoralla, määräävät

Differentiaali- ja integraalilaskenta 3 Harjoitus 4/ Syksy 2017

MAA7 Kurssikoe Jussi Tyni Tee B-osion konseptiin pisteytysruudukko! Kaikkiin tehtäviin välivaiheet näkyviin! Laske huolellisesti!

Ratkaisuja, Tehtävät

1. Olkoot vektorit a, b ja c seuraavasti määritelty: a) Määritä vektori. sekä laske sen pituus.

MAB3 - Harjoitustehtävien ratkaisut:

Ratkaisut vuosien tehtäviin

4.1 Kaksi pistettä määrää suoran

Fr ( ) Fxyz (,, ), täytyy integroida:

Ellipsit, hyperbelit ja paraabelit vinossa

T Vuorovaikutteinen tietokonegrafiikka Tentti

Geogebra -koulutus. Ohjelmistojen pedagoginen hyödyntäminen

Vektoriarvoiset funktiot Vektoriarvoisen funktion jatkuvuus ja derivoituvuus

Aluksi Kahden muuttujan lineaarinen yhtälö

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5.

Tekijä Pitkä matematiikka b) Kuvasta nähdään, että b = i 4 j. c) Käytetään a- ja b-kohtien tuloksia ja muokataan lauseketta.

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Toisen asteen käyrien ja pintojen geometriaa Ympyrän ja pallon ominaisuuksia

KJR-C1001 Statiikka ja dynamiikka. Luento Susanna Hurme

VEKTORIKARTTOJEN HYÖDYNTÄMINEN PAIKKATIETOSOVELLUKSISSA

Kahden suoran leikkauspiste ja välinen kulma (suoraparvia)

Ensimmäisen asteen polynomifunktio

(b) = x cos x 1 ( cos x)dx. = x cos x + cos xdx. = sin x x cos x + C, C R.

GEOGEBRAN TYÖKALUT. Siirrä-työkalu. Siirrä

Algoritmit 2. Luento 13 Ti Timo Männikkö

Juuri 6 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Vastaus: Määrittelyehto on x 1 ja nollakohta x = 1.

Kaikkiin tehtäviin ratkaisujen välivaiheet näkyviin! Lue tehtävänannot huolellisesti. Tee pisteytysruudukko B-osion konseptin yläreunaan!

Laudatur 4 MAA4 ratkaisut kertausharjoituksiin

Luento 7: Lokaalit valaistusmallit

Differentiaaliyhtälöryhmä

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta.

Pyramidi 4 Analyyttinen geometria tehtävien ratkaisut sivu 180 Päivitetty Pyramidi 4 Luku Ensimmäinen julkaistu versio

Insinöörimatematiikka D

GeoGebra. ohjeita ja tehtäviä 2. Pohdin projekti 1

MS-A0305 Differentiaali- ja integraalilaskenta 3 Luento 9: Greenin lause

Suorien ja tasojen geometriaa Suorien ja tasojen yhtälöt

7.lk matematiikka. Geometria 2. Hatanpään koulu 7B ja 7C Kevät 2017 Janne Koponen

Tehtävien ratkaisut

= ( F dx F dy F dz).

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Viikon aiheet. Funktion lineaarinen approksimointi

3 TOISEN ASTEEN POLYNOMIFUNKTIO

a) Mikä on integraalifunktio ja miten derivaatta liittyy siihen? Anna esimerkki = 16 3 =

Lisätehtäviä. Rationaalifunktio. x 2. a b ab. 6u x x x. kx x

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

Aloita Ratkaise Pisteytä se itse Merkitse pisteet saanut riittävästi pisteitä voit siirtyä seuraavaan osioon ei ole riittävästi

GeoGebran 3D paketti

Luento 9: Yhtälörajoitukset optimoinnissa

l 1 2l + 1, c) 100 l=0 AB 3AC ja AB AC sekä vektoreiden AB ja

Taso 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste, suora

1 Ensimmäisen asteen polynomifunktio

Tarkennamme geneeristä painamiskorotusalgoritmia

Ympyrän yhtälö

Luento 6: Geometrinen mallinnus

l 1 2l + 1, c) 100 l=0

MS-A0205/MS-A0206 Differentiaali- ja integraalilaskenta 2 Luento 1: Parametrisoidut käyrät ja kaarenpituus

Transkriptio:

Tietokonegrafiikan perusteet T-111.4300 3 op Luento 3: Tulostusprimitiivien toteutus Lauri Savioja 11/05 Primitiivien toteutus / 1 Suora ja ympyrä Antialiasointi Fill-algoritmit Point-in-polygon Sisältö Primitiivien toteutus / 2 1

GRAAFISTEN PRIMITIIVIEN TOTEUTUS HUOM! Oletuksena on XY-koordinaatisto Suorien viivojen piirtäminen Malli piirturikynällä piirtämisestä Kynä on aina jossakin (CP = Current Position) Inkrementaaliset alkeisoperaatiot: PenUp / PenDown CP' = CP + (±1, ±1)-> 8 eri askelta Primitiivien toteutus / 3 Piirtäminen rasteriruudulle Alkeisoperaationa: SetPixel ( x, y, color ) Pisteet piirrettävissä missä järjestyksessä hyvänsä Koordinaatit suhteellisina määritellyn rasterin origoon nähden Primitiivien toteutus / 4 2

Laskennallisia vaatimuksia Nopea, eli kokonaislukuja yhteen- ja vähennyslaskuja shiftejä Hitaita asioita kertolaskut reaaliluvut kirjastofunktiot, esim. trigonometriset operaatiot Primitiivien toteutus / 5 Suoran viivan vaatimukset Suora Tasapaksu (tasainen intensiteetti) Portaaton Täsmällinen alku ja loppu Intensiteetti riippumaton pituudesta ja kulmakertoimesta Primitiivien toteutus / 6 3

Algoritmi suoran piirtämiseksi Suoran yhtälö y=ax+b Alkupiste (x o,y o ), loppupiste (x 1,y 1 ) Primitiivien toteutus / 7 DDA (Digital Differential Analyzer) - algoritmi Periaate: pisteitä suoralla voidaan laskea esim. janan päätepisteiden (p 1, p 2 ) avulla esitetystä parametrimuodosta p(t) = p 1 + t * p = p 1 + t * (p 2 - p 1 ) ; t [0,1] x(t) = x 1 + t * X y(t) = y 1 + t * Y = y 1 + m * (t * X) ; m = Y / X eli antamalla t:lle sopivia arvoja ja pyöristämällä lasketut koordinaatit. Primitiivien toteutus / 8 4

DDA (jatkuu) symmetrinen DDA : iteroidaan t-parametria riittävän pienin askelin, jotta kaikki "janalla olevat" (so. lähellä olevat) pisteet tulevat käytyä läpi. yksinkertainen DDA : iteroidaan yksikköaskelin sitä koordinaattia, jonka siirtymä on suurempi, esim. x increment = ±1 ja y increment = m, kun m < 1. heikkouksia: jakolasku alussa liukuluvut, pyöristys joka pisteessä Primitiivien toteutus / 9 Bresenham PASCAL-kielisenä: procedure bres_line (x1, y1, x2, y2 : integer); var dx, dy, x, y, x_end, p, const1,const2 : integer; begin dx := abs(x1 - x2); dy := abs(y1 - y2); p := 2 * dy - dx; const1 := 2 * dy; const2 := 2 * (dy - dx); if x1 > x2 then begin { if x1 > x2 } x := x2; y := y2; x_end := x1 end else begin { if x1 <= x2 } x := x1; y := y1; x_end := x2 end; set_pixel(x, y); while x < x_end do begin x := x + 1; if p < 0 then p := p + const1 else begin y := y + 1; p := p + const2 end; set_pixel(x, y) end end; Primitiivien toteutus / 10 5

Bresenham (jatkuu) algoritmin edut: ei lainkaan jakolaskua eikä liukulukuja kertolasku vain tekijällä 2 (= bin.luvun sivuttaissiirto) Huom. algoritmi johdettu nousevalle suoralle, dx>0, m < 1. Jos dx < 0, vaihdetaan päätepisteet (p 1, p 2 ) keskenään, tai päivitetään x-arvoa -1:n askelin laskevalle suoralle, -1 < m < 0, vaihdetaan y:n askeleeksi -1 Jos m > 1, vaihdetaan x:n ja y:n roolit keskenään. Primitiivien toteutus / 11 KÄYRÄT VIIVAT suorien ohella tarvitaan usein myös käyriä: 2 käyrät (ympyrän, ellipsin, parabelin kaaret) splinit (myöhemmin tällä kurssilla) periaatteessa mikä hyvänsä käyrä voidaan approksimoida murtoviivalla, mutta tehokkaampaa on yleensä tuottaa käyrän pisteet suoraan sen määritelmästä DDA-algoritmi ja Bresenhamin muunnelma siitä ovat helposti muunnettavissa monille käyrille sopiviksi, mutta on varottava äärellisestä differenssiaskeleesta aiheutuvaa virhettä. Primitiivien toteutus / 12 6

Bresenhamin ympyränpiirtoalgoritmi symmetrian ansiosta riittää tarkastella vain kahdeksasosaa koko ympyrästä; loput pisteet saadaan vaihtamalla x:n ja y:n rooleja ja etumerkkejä (olettaen, että keskipiste on origossa): -x,y x,y -y,x y,x -y,-x y,-x -x,-y x,-y piirtäminen alkaa pisteestä (0,r) ja päättyy, kun x=y. Primitiivien toteutus / 13 Ympyrä (jatkuu) Tarkastellaan askelta i, jossa ollaan viimeksi piirretty piste (x i, y i ), ja seuraavaksi on pääteltävä kumpi pisteistä, (x i +1, y i ) vai (x i +1, y i 1), on lähempänä todellista käyrän pistettä (x i +1, y exact ) : y exact yi y i-1 d1 d2 xi xi+1 Primitiivien toteutus / 14 7

Ympyrä (jatkuu) ympyrän yhtälöstä y 2 = r 2 x 2 saadaan: y exact 2 = r 2 (x i + 1) 2, jota voidaan verrata vaihtoehtoisiin pisteisiin: d 1 = y i 2 y exact 2 = y i 2 r 2 + (x i + 1) 2, d 2 = y exact 2 (y i - 1) 2 = r 2 (x i + 1) 2 (y i - 1) 2 p i = d 1 d 2 = 2(x i + 1) 2 + y i 2 + (y i - 1) 2 2r 2 valitaan se piste, jonka etäisyys oikeasta on pienempi, eli jos parametri p i < 0, niin valitaan arvo y i, muuten arvo (y i - 1). Primitiivien toteutus / 15 Ympyrä (jatkuu) Parametrin p arvo seuraavassa pisteessä (x i +1, y i+1 ) voidaan laskea iteratiivisesti edellisessä pisteessä lasketusta arvosta. Edellä laskettua lauseketta muokkaamalla saadaan: p i+1 = 2[(x i +1) + 1] 2 + y i+1 2 + (y i+1-1) 2 2r 2 = p i + 4x i + 6 + 2(y i +12 - y i2 ) 2(y i+1 - y i ) = p i + 4x i + 6, jos y i+1 = y i = p i + 4x i + 6 4y i + 4, jos y i+1 = y i + 1 aloituspisteessä (0, r) lauseke on: p 1 = 3 2r. Primitiivien toteutus / 16 8

Ympyräkoodi procedure bres_circle (x_center, y_center, radius : integer); var p, x, y : integer; procedure plot_circle_points; { 8 symmetric positions } begin set_pixel(x_center + x, y_center + y); set_pixel(x_center - x, y_center + y); set_pixel(x_center + x, y_center - y); set_pixel(x_center - x, y_center - y); set_pixel(x_center + y, y_center + x); set_pixel(x_center - y, y_center + x); set_pixel(x_center + y, y_center - x); set_pixel(x_center - y, y_center - x) end; Primitiivien toteutus / 17 Ympyräkoodi (jatkuu) begin { bres_circle } x := 0; y := radius; p := 3-2 * radius; while x < y do begin plot_circle_points; if p < 0 then p := p + 4 * x + 6 else begin p := p + 4 * (x - y) + 10; y := y - 1; end; x := x + 1; end if x = y then plot_circle_points; end; Primitiivien toteutus / 18 9

Aliasoituminen l. vieraantumisongelma rasteriviivojen piirtämisessä piirtosuunta vaikuttaa viivan tiheyteen tiheys = 8 / (8 * 2) tiheys = 8 / 8 viivan leveys voi olla vain kokonaisluku xy-suunnissa vinon viivan reuna on porrasmainen (jagged) HUOM! Sama ongelma koskee myös muita graafisia kuvioita. Primitiivien toteutus / 19 Antialiasointi-diat Primitiivien toteutus / 20 10

Antialiasointi Antialiasointi = vieraantumisongelman ehkäiseminen tavallisin menetelmä on kunkin pikselin sävyttäminen sen mukaan, kuinka suurelta osin piirrettävä kuvio peittää sitä: Primitiivien toteutus / 21 Antialiasointi (jatkuu) viivan reunat sumenevat, mutta keskimäärin tasoittuvat mahdollista vain sävynäytöllä (ei mustavalkealla) erityislaitteilla mahdollista pikselien hienosäätö (pixel phasing): porraskohdissa olevia pikseleitä siirretään lähemmäs oikeaa viivaa pikselien suuruutta säädetään viivan kaltevuuden mukaan Primitiivien toteutus / 22 11

ALUEEN TÄYTTÄMINEN Kaksi perusperiaatetta: 1) konversio janoiksi pyyhkäisyjuoville 2) värin levittäminen rasterissa Primitiivien toteutus / 23 Juovakonversio etsitään kultakin pyyhkäisyjuovalta ne janat, jotka jäävät monikulmioalueen sisälle y1 y2 y3 y4 y5 y6 y7 y8 x = 1 2 3 4 5 6 87 9 10 Primitiivien toteutus / 24 12

Juovakonversio (jatkuu) voidaan laskea joka juovalle (y=vakio) toisistaan riippumatta, missä kohdissa (x-arvo) juova leikkaa monikulmion reunan tehokkaampaa, jos hyödynnetään koherenssia (so. vierekkäisten juovien samankaltaisuutta): saman reunajanan perättäiset leikkauspisteet juovien kanssa voidaan laskea inkrementaalisesti, kuten janan rasteroinnissa (DDA, Bresenham) kutakin juovaa leikkaa vain osa janoista; likimain sama aktiivinen janajoukko leikkaa myös seuraavaa juovaa (samassa x- järjestyksessä) singulariteettiongelma: montako leikkausta lasketaan, jos pyyhkäisyjuova kulkee monikulmion nurkan kautta? ratkaistaan tarkastelemalla janojen suuntia... Primitiivien toteutus / 25 Päällekkäiset monikulmiot: prioriteettijärjestys B B scan line A C A C päällekkäisyysjärjestys eri osissa pyyhkäisyjuovaa: A B A C B A C B C Yleinen koherenssiperiaate: geometristen objektien järjestäminen Y-suunnassa (pyyhkäisyjuovittain) X-suunnassa (kunkin juovan sisällä) P-suunnassa (prioriteetti eli "syvyys") saa aikaan sen, että joudutaan kulloinkin vertailemaan vain pienellä aktiivisella alueella olevia objekteja keskenään. Näitä piilopinta-algoritmeja käsitellään kirjan luvussa 13 ja myöhemmällä luennolla. Primitiivien toteutus / 26 13

Rekursiivinen 4-naapurusto ja 8-naapurusto Reunojen määrittely? Mustetippa-algoritmi void boundaryfill(int x, int y, int fill, int boundary) { int current; } current = getpixel(x, y); if ((current!= boundary) && (current!= fill)) { setcolor(fill); setpixel(x, y); boundaryfill(x+1, y, fill, boundary); boundaryfill(x-1, y, fill, boundary); boundaryfill(x, y+1, fill, boundary); boundaryfill(x, y-1, fill, boundary); } Primitiivien toteutus / 27 Pisteen sijainti alueen suhteen Usein tarvitaan tietoa siitä, kuuluuko annettu piste mallin määrittämään alueeseen. Eri esitystavoille voidaan käyttää erilaisia menetelmiä: suoraan sijoittamalla koordinaatit epäyhtälöön esim. piste (2, 3) on 10-säteisen ympyrän sisällä: 2 2 2 + 3 < 10 vertaamalla avaruusjakoon ja luetteloon alueen soluista tutkimalla ovatko pisteen parametrit rajatuilla väleillä edellyttää parametrikuvauksen käänteismuunnosta " 1 f : ( x, y, z)! ( u, v) 2 tutkimalla geometrisesti, onko piste reunan sisä- vai ulkopuolella Primitiivien toteutus / 28 14

Point-in-polygon Odd-even rule, scan-line Asetetaan ääretön puolisuora tutkittavasta pisteestä lähtien ja lasketaan sen leikkauspisteet alueen reunaviivan (tai pinnan) kanssa. Koska äärettämän kaukana oleva puolisuoran pää on alueen ulkopuolella ja reunan ylitys merkitsee aina siirtymistä joko ulkoa sisään tai sisältä ulos, niin pariton määrä leikkauksia merkitsee pisteen olevan alueen sisällä n=1 n=3 n=4 Primitiivien toteutus / 29 Point-in-polygon Normaalivektorit ristituloilla, vektorien suunnat Ongelmatapaukset itseään leikkaavat tai sulkeutumattomat reunat Primitiivien toteutus / 30 15