Luento 3: 2D Katselu. Sisältö

Samankaltaiset tiedostot
Luento 2: 2D Katselu. Sisältö

Luento 2: Tulostusprimitiivit

Luento 6: Tulostusprimitiivien toteutus

Luento 2: Viivan toteutus

Luento 3: Tulostusprimitiivien toteutus

T Vuorovaikutteinen tietokonegrafiikka Tentti

Numeeriset menetelmät

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

PRELIMINÄÄRIKOE PITKÄ MATEMATIIKKA

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

811120P Diskreetit rakenteet


Nopea kertolasku, Karatsuban algoritmi

! 7! = N! x 8. x x 4 x + 1 = 6.

Tekijä Pitkä matematiikka

Luento 3: 3D katselu. Sisältö

Ympyrän yhtälö

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

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

Luento 6: Geometrinen mallinnus

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.

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

Vanhoja koetehtäviä. Analyyttinen geometria 2016

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

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

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

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

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

Yleistä vektoreista GeoGebralla

MAB3 - Harjoitustehtävien ratkaisut:

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

Luento 6: Geometrinen mallinnus

2 Pistejoukko koordinaatistossa

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

A-osa. Ratkaise kaikki tämän osan tehtävät. Tehtävät arvostellaan pistein 0-6. Taulukkokirjaa saa käyttää apuna, laskinta ei.

A-osio. Tehdään ilman laskinta ja taulukkokirjaa! Valitse tehtävistä A1-A3 kaksi ja vastaa niihin. Maksimissaan tunti aikaa suorittaa A-osiota.

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

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

Monikulmiot 1/5 Sisältö ESITIEDOT: kolmio

1. a. Ratkaise yhtälö 8 x 5 4 x + 2 x+2 = 0 b. Määrää joku toisen asteen epäyhtälö, jonka ratkaisu on 2 x 1.

Ratkaisut vuosien tehtäviin

Lieriö ja särmiö Tarkastellaan pintaa, joka syntyy, kun tasoa T leikkaava suora s liikkuu suuntansa

Algoritmit 1. Luento 11 Ti Timo Männikkö

a) Sievennä lauseke 1+x , kun x 0jax 1. b) Aseta luvut 2, 5 suuruusjärjestykseen ja perustele vastauksesi. 3 3 ja

4 Tehokkuus ja algoritmien suunnittelu

MAB3 - Harjoitustehtävien ratkaisut:

Tasogeometriaa GeoGebran piirtoalue ja työvälineet

Paikkatiedon käsittely 4. Diskreettiä geometriaa

Johdatus matematiikkaan - tarinaosasto Tero Kilpeläinen

Tällaisessa tapauksessa on usein luontevaa samaistaa (u,v)-taso (x,y)-tason kanssa, jolloin tason parametriesitys on *** VEKTORIANALYYSI.

Geogebra -koulutus. Ohjelmistojen pedagoginen hyödyntäminen

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

4.3. Matemaattinen induktio

Kenguru 2019 Student lukio

Lukion matematiikkakilpailun alkukilpailu 2015

Peruskoulun matematiikkakilpailu Loppukilpailu 2010 Ratkaisuja OSA 1

Racket ohjelmointia osa 1. Tiina Partanen Lielahden koulu 2014

PERUSASIOITA ALGEBRASTA

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Laudatur 4 MAA4 ratkaisut kertausharjoituksiin

Johdatus verkkoteoriaan luento Netspace

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

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

Algoritmit 2. Luento 6 Ke Timo Männikkö

Numeeriset menetelmät

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Paikkatiedon hallinta ja analyysi 2. Diskreettiä geometriaa

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

Anna jokaisen kohdan vastaus kolmen merkitsevän numeron tarkkuudella muodossa

RATKAISUT a + b 2c = a + b 2 ab = ( a ) 2 2 ab + ( b ) 2 = ( a b ) 2 > 0, koska a b oletuksen perusteella. Väite on todistettu.

10. Esitys ja kuvaus

4. Varastossa on 24, 23, 17 ja 16 kg:n säkkejä. Miten voidaan toimittaa täsmälleen 100 kg:n tilaus avaamatta yhtään säkkiä?

Paraabeli suuntaisia suoria.

= = = 1 3.

Luento 6: Piilopinnat ja Näkyvyys

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

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Epäeuklidista geometriaa

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Algoritmit 2. Luento 9 Ti Timo Männikkö

Funktiot. funktioita f : A R. Yleensä funktion määrittelyjoukko M f = A on jokin väli, muttei aina.

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

MAA4 - HARJOITUKSIA. 1. Esitä lauseke 3 x + 2x 4 ilman itseisarvomerkkejä. 3. Ratkaise yhtälö 2 x x = 2 (yksi ratkaisu, eräs neg. kokon.

Tehtävien ratkaisut

TYÖPAJA 1: Tasogeometriaa GeoGebran piirtoalue ja työvälineet

GEOMETRIA MAA3 Geometrian perusobjekteja ja suureita

Harjoituksia MAA4 - HARJOITUKSIA. 6. Merkitse lukusuoralle ne luvut, jotka toteuttavat epäyhtälön x 2 < ½.

Harjoitus 7 -- Ratkaisut

LAUSEKKEET JA NIIDEN MUUNTAMINEN

3 Yleinen toisen asteen yhtälö ja epäyhtälö

Transkriptio:

Tietokonegrafiikan perusteet T-111.4300 3 op Luento 3: 2D Katselu Lauri Savioja 11/06 2D katselu / 1 Sisältö Ikkuna ja näyttöalue Viivanleikkaus ikkunaan Monikulmion leikkaus ikkunaan Tekstin leikkaus Erikoistapauksia 2D katselu / 2 1

Ikkunointi ja leikkaus Ongelma Halutaan käyttää ohjelmassa sovelluskohteeseen sopivia koordinaatteja, mutta piirtää sama kuva eri laitteilla, joilla on aivan erilainen koordinaatisto. Esim. karttasovelluksen perusyksikkönä metri kohteena 100 x 100 km maa-alue näyttölaitteen resoluutio 480 x 640 pikseliä, piirturin resoluutio 10000 x 7000 askelta. Ajatus: Irrotetaan kuvien määrittely niiden piirtämisestä. Luovutaan ohjelmassa laitekoordinaatistosta (DC) ja käytetään maailmankoordinaatistoa (WC). Y y X x World Coordinates (WC) Device Coordinates (DC) 2D katselu / 3 Katseluoperaatio Graafiset tulostusprimitiivit "piirtävät" kuviteltua maailmaa. Laitteelle kuva syntyy "katselemalla" maailmaa ikkunan läpi. Ikkunan ulkopuolelle jäävät osat leikataan pois. Jäljelle jääneet osat muunnetaan laitekoordinaatistoon. 2D katselu / 4 2

Ikkunan ja näyttöalueen suhteet Ikkunan () avulla olemme saaneet määritellyksi sen alueen "maailmasta", jonka pitäisi näkyä. Miten määrittelemme laitteen kuva-alueelta sen osa-alueen, jolle "näkymä" halutaan piirtää? Kuva-alue jaetaan osa-alueisiin, joita kutsutaan näyttöalueiksi (viewport), vrt. frame:t www-sivuilla Erityisesti vuorovaikutteisessa grafiikassa useat yhtäaikaiset näyttöalueet (viewport) ovat tärkeitä. 2D katselu / 5 Ikkuna-näyttöalue (jatkuu) Ikkuna-näyttöalue-muunnos yw yd WT VT WB WC WL WR Kuvaus maailmankoordinaatistosta (ikkunasta) kuva-alueen koordinaatistoon (näyttöalueelle): VR! VL x D = (x w! W L) + V WR! WL eli x D = a x W + b y D = c y W + d VT! VB yd = (yw! W B) + V missä a = (V R - V L ) / (W R - W L ) WT! WB b = V L - a W L (vast. c ja d) Ts. kukin piste vaatii 2 kertolaskua ja 2 yhteenlaskua. xw 2D katselu / 6 VB DC VL VR xd L B 3

Viivakuvion leikkaus ikkunaan Esim. viiden viivan ketjusta (1 polyline) jää jäljelle neljä viivaa (2 ketjua): polyline polyline1 polyline2 1 3 2 1 3 2 4 4 5 Viivakuvion kukin jana leikataan erikseen: Rasterilaitteilla leikkaus voi tapahtua juovakonversion yhteydessä (vain ikkunassa olevat pikselit piirretään). Mieluummin lasketaan ensin näkyvälle janan osalle uudet päätepisteet. 2D katselu / 7 Viivakuvion leikkaus (jatkuu) Vertaamalla janan päätepisteitä ikkunarajoihin saadaan nopeasti selville kolme vaihtoehtoa: 1) Viivan molemmat päätepisteet ikkunan sisällä => viiva kokonaan näkyvissä: PIIRRÄ 2) Viivan toinen päätepiste ikkunan sisällä, toinen ulkona => osa näkyvissä: LEIKKAA 3) Viivan molemmat päätepisteet ulkona a) => osa näkyvissä: LEIKKAA b) => viiva ulkona : UNOHDA Kuinka päästään nopeasti helppoihin tapauksiin? 2D katselu / 8 4

Viivanleikkaus (jatkuu) Cohen-Sutherland-algoritmi Pyritään välttämään viiva-reuna leikkausten laskeminen mahd. pitkälle Testataan voidaanko jokin viiva piirtää kokonaan Testataan voidaanko jokin viiva jättää kokonaan piirtämättä Leikataan viiva reunan kohdalta, siten, että osa siitä voidaan hyväksyä Jatketaan jokaiselle viivalle ed. askelta, kunnes jäljelle jäävät osat voidaan joko hyväksyä tai hylätä 2D katselu / 9 Viivakuvion leikkaus (jatkuu) Cohen-Sutherland-algoritmi: koodataan viivan P1, P2 molemmat päätepisteet neljällä bitillä, jotka kertovat, minkä ikkunarajojen (tai niiden jatkeitten) suhteen ollaan ulkopuolella: b1 1001 1000 1010 0001 0000 0010 b3 b2 b4 0101 0100 0110 Huomio #1 : ( Code (P1) = 0 ) and ( Code (P2) = 0 ) => viiva kokonaan sisällä : PIIRRÄ Huomio #2 : ( Code (P1) and Code (P2) ) <> 0 => viiva kokonaan saman rajan ulkopuolella : UNOHDA 2D katselu / 10 5

var Leikkaus-koodi (Cohen-Sutherland) : record xl, xr, yb, rt : real end; procedure Clip_line (x1, y1, x2, y2 : real); type edge = (left, right, bottom, top); outcode = set of edge; var c, c1, c2 : outcode; x, y : real; procedure code (x, y : real; var c : outcode); c := [ ]; if x <.xl then c := [left] else if x >.xr then c := [right]; if y <.yb then c := c + [bottom] else if y >.yt then c := c + [top]; end; code(x1, y1, c1); code(x2, y2, c2); while (((c1 <> [ ]) or (c2 <> [ ])) and (c1 * c2 = [ ])) do if c1 <> [ ] then c := c1 else c := c2; if left in c then { left edge crossed } x :=.xl; y := y1 + (.xl - x1) * (y2 - y1) / (x2 - x1); end else if right in c then { right edge crossed } x :=.xr; y := y1 + (.xr - x1) * (y2 - y1) / (x2 - x1); end else if bottom in c then { bottom edge crossed } y :=.yb; x := x1 + (.yb - y1) * (x2 - x1) / (y2 - y1); end else if top in c then { top edge crossed } y :=.yt; x := x1 + (.yt - y1) * (x2 - x1) / (y2 - y1); end; if c = c1 then x1 := x; y1 := y; code(x1, y1, c1) end else x2 := x; y2 := y; code(x2, y2, c2) end end; if (c1 = [ ]) and (c2 = [ ]) then showline(x1, y1, x2, y2); end; 2D katselu / 11 Viivanleikkaus (jatkuu) Kuinka monta kertaa ohjelman while-osa enintään suoritetaan? kukin suoritus sisältää yhden kerto- ja jakolaskun liukuluvuilla maksimi: 4 * ja 4 / operaatiota 2D katselu / 12 6

Viivanleikkausalgoritmit (jatkuu) Liang-Barsky-algoritmi: tarkastellaan janaa parametrimuodossa: p(u) = p 1 + u p = p 1 + u (p 2 - p 1 ) ; u [0..1] eli x(u) = x 1 + X * u = x 1 + (x 2 - x 1 ) * u y(u) = y 1 + Y * u = y 1 + (y 2 - y 1 ) * u ikkunan sisällä olo voidaan ilmaista epäyhtälöillä W left <= x(u) <= W right W bottom <= y(u) <= W top joista jokainen on muotoa p k u q k 2D katselu / 13 Viivanleikkaus (jatkuu) janan ja ikkunareunan leikkauspisteitä voidaan tutkia parametrin u suhteen, laskematta leikkauksen (x,y)-koordinaatteja: jos leikattava, niin lasketaan r = q k / p k, jota verrataan aikaisempiin janan päätepisteiden parametriarvoihin u 1 ja u 2 (aluksi 0 ja 1) p:n etumerkistä ja vertailuista r:n ja u 1,2 :n välillä saadaan selville hylättävät viivat leikkauspisteet lasketaan vasta lopuksi u:n perusteella, jos ikkunan sisälle jäi mitään vertailu Cohen-Sutherland-algoritmiin: kaikki neljä leikkausta lasketaan aina, jollei janaa hylätä ikkunan ulkopuolisena leikkauksen laskeminen vaatii vain jakolaskun; toisaalta neljä kertolaskua tarvitaan lopullisten koordinaattien laskennassa summa summarum: (a) algoritmit voittavat toisensa eri tilanteissa (b) neljää leikkauslaskentaa ei voi välttää 2D katselu / 14 7

Taas uusi viivanleikkausalgoritmi Geometrinen puolitushaku (midpoint subdivision algorithm): tutkitaan janan päätepisteitä kuten edellä: jos kokonaan sisällä tai ulkona => PIIRRÄ tai UNOHDA muuten jaa viiva puoliksi ja toista sama rekursiivisesti kummallekin puolikkaalle tehokasta, koska: puolituspisteen haku kokonaislukukoordinaatistossa vaatii vain yhteenlaskun ja shift:in: x m = ( x 1 + x 2 ) / 2 y m = ( y 1 + y 2 ) / 2 rekursio voidaan toteuttaa iteraationa laitetasolla toistojen maksimimäärä = log 2 (ikkunan resoluutio) näkyvien osien piirtäminen voidaan suorittaa lopuksi yhdellä kertaa, kun leikkauspisteet on haettu. 2D katselu / 15 Esim. Geometrinen puolitus (jatkuu) 1 1/2 1 2 1/4 1/8 3 4 2D katselu / 16 8

Lisää viivanleikkausta Parametrinen leikkaus esim. ympyräikkunaan: Parametrinen leikkausperiaate on hyvin yleistettävissä (kaltevat tai kaarevat ikkunareunat, yleensä konveksi ikkuna n-d-avaruudessa). Yleisperiaatteena on seuraava (esimerkkinä käytetään ympyräikkunaa): ilmaistaan ikkunan sisällä oleva alue epäyhtälön avulla: F(x,y) = (x - c x ) 2 + (y - c y ) 2 + r 2 0 (c x,c y ) = ympyrän keskipiste, r = säde epäyhtälöön sijoitetaan janan parametrinen lauseke : x(u) = (1 - u) x 1 + u x 2 y(u) = (1 - u) y 1 + u y 2 => F( x(u), y(u) ) = ((1-u)x 1 + u x 2 - c x ) 2 + ((1 - u) y 1 + u y 2 - c y ) 2 + r 2 0 eli sievennettynä Au 2 + Bu + C 0, missä A,B,C ovat riippuvia tekijöistä p 1, p 2, c x,c y ja r. 2D katselu / 17 Viivanleikkaus (jatkuu) toisen asteen yhtälöllä on juuret! b ± u, u = 1 2 2 b! 4ac 2a epäyhtälölle saadaan kolme tapausta: a) juuret ovat reaalisia, b 2 4ac > 0 => ratkaisuna intervalli [u 1, u 2 ], josta lasketaan ikkunan sisään jäävä osa b) yksi kaksoisjuuri, b 2 4ac = 0 => u 1 =u 2, jana sivuaa ikkunaa c) juuret imaginaarisia, b 2 4ac < 0 => jana ei leikkaa ikkunaa u 2 u1,2 u=? u 1 a) b) c) 2D katselu / 18 9

Monikulmioalueen leikkaus Alueen täyttöalgoritmit edellyttävät, että rajat muodostavat yhtenäisen sulkeutuvan monikulmion => pelkkä erillisten viivojen leikkaus ei riitä, vaan kuvio on suljettava lisäviivoilla ikkunarajoja pitkin Esim. fill-area lisäviiva 2D katselu / 19 Monikulmion leikkaus (jatkuu) Sutherland-Hodgman-algoritmi Idea: on helppo suorittaa leikkaus yhden (äärettömän) suoran suhteen kerrallaan. Esim. clip left Huom! clip top clip right clip bottom Huom! 2D katselu / 20 10

Monikulmion leikkaus (jatkuu) Sutherland-Hodgman-algoritmin idea: monikulmion esitys on nurkkapisteiden jono (stream) kutakin pistettä jonossa verrataan ikkunareunaan: sisällä => säilytä jonossa ulkona => unohda aina, kun ikkunan reuna ylitetään (perättäiset pisteet eri puolilla), lisätään leikkauspiste jonoon myös viimeisen ja ensimmäisen pisteen väli tutkitaan, jotta kuvio sulkeutuisi 2D katselu / 21 Sutherland-Hodgman (jatkuu) esim. p1 p2 p3 p4 p5 p6 p7 ( p1) => p1' p2 p3 p3' p4' p5 p5' ( p1') p1 p2 p1' p2 p7 p4 p3 p3' p3 p4' p5 p5 p6 p5' uusi pistejono siirretään seuraavan ikkunarajan suhteen leikkaavalle proseduurille tuloksena aina yhtenäinen sulkeutuva reunaviiva, vaikka alue pilkkoutuisikin => voi tulla ylimääräisiä reunoja, kuten p3' p4' Kuinka toimitaan, jos näitä halutaan välttää? 2D katselu / 22 11

Tekstin leikkaus "Kaikki tai ei mitään" -periaate kolmella eri tasolla toteutettuna: a) koko merkkijono tai sana b) yksi kirjain kerrallaan c) kirjaimen jokainen viiva tai pikseli 2D katselu / 23 Erikoistapaukset (jatkuu) Reiälliset monikulmiot moniosaisia tietorakenteita, esim. listarakenteita ((p1 p2 p3 p4 p5 p6) (q1 q2 q3 q4)) tai yhdistetään erilliset reunat apuviivoilla yhdeksi p1 p2 p3 q2 q1 q4 q3 q2 p3 p4 p5 p6 Huom! kiertosuunta, jana p3 q2 kahdesti Mielivaltaisen muotoiset ikkunan reunaviivat (stencil) esim. PostScript-kielessä 2D katselu / 24 12