Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon)

Hasonló dokumentumok
Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon)

Máté: Számítógépes grafika alapjai

Algoritmusok raszteres grafikához

Látható felszín algoritmusok

Algoritmusok raszteres grafikához

Algoritmusok raszteres grafikához

Máté: Számítógépes grafika alapjai

Cohen-Sutherland vágóalgoritmus

Máté: Számítógépes grafika alapjai

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Klár Gergely

Máté: Számítógépes grafika alapjai

Koordináta-geometria feladatok (emelt szint)

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Máté: Számítógépes grafika alapjai

Képfeldolgozás és Számítógépes Grafika Tanszék 1. A SZÁMÍTÓGÉPES GRAFIKA TÁRGYA, ALKALMAZÁSAI

Képfeldolgozás és Számítógépes Grafika Tanszék 1. A SZÁMÍTÓGÉPES GRAFIKA TÁRGYA, ALKALMAZÁSAI

Koordináta-geometria feladatgyűjtemény

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

Gazdasági Matematika I. Megoldások

Helyvektorok, műveletek, vektorok a koordináta-rendszerben

Tartalom. Tartalom. Hajder Levente Szakasz raszterizálása. 2017/2018. II. félév. Poligon raszterizáció.

Geometriai algoritmusok

10. Koordinátageometria

BME MOGI Gépészeti informatika 15.

Síklapú testek. Gúlák, hasábok Metszésük egyenessel, síkkal

Feladatok Házi feladat. Keszeg Attila

Geometria. a. Alapfogalmak: pont, egyenes, vonal, sík, tér (Az alapfogalamakat nem definiáljuk)

Skaláris szorzat: a b cos, ahol α a két vektor által bezárt szög.

Matematika 11 Koordináta geometria. matematika és fizika szakos középiskolai tanár. > o < szeptember 27.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Függvények Megoldások

Megoldás: Mindkét állítás hamis! Indoklás: a) Azonos alapú hatványokat úgy szorzunk, hogy a kitevőket összeadjuk. Tehát: a 3 * a 4 = a 3+4 = a 7

Koordináta-geometria feladatgyűjtemény (A feladatok megoldásai a dokumentum végén találhatók)

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

43. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY MEGYEI FORDULÓ HATODIK OSZTÁLY JAVÍTÁSI ÚTMUTATÓ

Máté: Számítógépes grafika alapjai

9. Írjuk fel annak a síknak az egyenletét, amely átmegy az M 0(1, 2, 3) ponton és. egyenessel;

10. előadás. Konvex halmazok

egyenletrendszert. Az egyenlő együtthatók módszerét alkalmazhatjuk. sin 2 x = 1 és cosy = 0.

Máté: Számítógépes grafika alapjai

Németh László Matematikaverseny április 16. A osztályosok feladatainak javítókulcsa

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

A Paint program használata

mintásfal mintásfal :m :sz :dbjobbra :dbfel

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

Arany Dániel Matematikai Tanulóverseny 2010/2011-es tanév 1. forduló haladók III. kategória

Lehet hogy igaz, de nem biztos. Biztosan igaz. Lehetetlen. A paralelogrammának van szimmetria-középpontja. b) A trapéznak két szimmetriatengelye van.

Algoritmizálás, adatmodellezés 10. előadás

Koordináta - geometria I.

Hajder Levente 2018/2019. II. félév

Hajder Levente 2014/2015. tavaszi félév

FÜGGVÉNYEK. A derékszögű koordináta-rendszer

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Függvények

Losonczi László. Debreceni Egyetem, Közgazdaság- és Gazdaságtudományi Kar

1. Az ábrán látható táblázat minden kis négyzete 1 cm oldalhosszúságú. A kis négyzetek határvonalait akarjuk lefedni. Meg lehet-e ezt tenni

TÉRINFORMATIKAI ALGORITMUSOK

Koordináta-geometria II.

Koordináta geometria III.

Programozási nyelvek 2. előadás

Ferde kúp ellipszis metszete

Java és web programozás

Programozási segédlet

Vektorok és koordinátageometria

Algoritmusok bonyolultsága

Paraméteres és összetett egyenlôtlenségek

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Gráfelmélet II. Gráfok végigjárása

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

Színezések Fonyó Lajos, Keszthely

EÖTVÖS LORÁND SZAKKÖZÉP- ÉS SZAKISKOLA TANÍTÁST SEGÍTŐ OKTATÁSI ANYAGOK MÉRÉS TANTÁRGY

Háromszögek, négyszögek, sokszögek 9. évfolyam

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

Exponenciális és logaritmusos kifejezések, egyenletek

Számítógépes Grafika mintafeladatok

Fiók ferde betolása. A hűtőszekrényünk ajtajának és kihúzott fiókjának érintkezése ihlette az alábbi feladatot. Ehhez tekintsük az 1. ábrát!

Teljes függvényvizsgálat

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Diszkrét matematika 2. estis képzés

Érettségi feladatok Koordinátageometria_rendszerezve / 5

Ellipszis átszelése. 1. ábra

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Geometria 1 normál szint

Gráfelméleti alapfogalmak-1

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását.

Koordinátageometria. , azaz ( ) a B halmazt pontosan azok a pontok alkotják, amelynek koordinátáira:

Láthatósági kérdések

Hogyan óvjuk meg értékes festményeinket?

Koordináta-geometria. Fogalom. Jelölés. Tulajdonságok, definíciók

2. SZÉLSŽÉRTÉKSZÁMÍTÁS. 2.1 A széls érték fogalma, létezése

1. Legyen egy háromszög három oldalának a hossza a, b, c. Bizonyítsuk be, hogy Mikor állhat fenn egyenlőség? Kántor Sándorné, Debrecen

Egyenletek, egyenlőtlenségek grafikus megoldása TK. II. kötet 25. old. 3. feladat

Modellezési transzformáció: [r lokális,1] T M = [r világ,1] Nézeti transzformáció: [r világ,1] T v = [r képernyo,1]

5. gyakorlat. Feladatunk az, hogy készítsük el Zamárdi környékének területhasználati a térképét.

1.1 A függvény fogalma

FOLYTATÁS A TÚLOLDALON!

MEMO (Middle European Mathematical Olympiad) Szoldatics József, Dunakeszi

Fuzzy halmazok jellemzői

44. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY. Megyei forduló április 11.

Átírás:

Grafikus primitívek kitöltése Téglalap kitöltése Kör, ellipszis kitöltése Kitöltés mintával Grafikus primitívek kitöltése A tertületi primitívek zárt görbével határolt területek, amelyeket megjelníthetünk körvonalaikkal, vagy pedig kitölthetünk valamilyen színnel. Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) Megjelenítendők a) Csak a határvonalat reprezentáló pontok kirajzolásával (kitöltetlen) b) Minden belső pont kirajzolásával (kitöltött)

Grafikus primitívek kitöltése Alapkérdés: Mely képpontok tartoznak a grafikus primitívhez? Poligonok esetében problémába ütközhetünk a kitöltést illetően, hiszen létezik olyan poligon, amely elmetszi önmagát. Kérdés, hogy ilyenkor hogyan járjunk el. Szkenneljük sorfolytonosan képet, és figyeljük meg, hogy mikor haladunk át egy poligon élén. Ha egy sorban haladunk, számoljuk ezeket az áthaladásokat: minden páratlan áthaladás után a poligon belsejében vagyunk, és minden páros áthaladás után a poligonon kívül vagyunk. Páratlan paritás szabálya: Páros számú metszéspont: külső pont Páratlan számú metszéspont: belső pont Grafikus primitivek kitöltése Ezzel a módszerrel szakaszonként ki tudjuk tölteni a poligont, ráadásul az eljárás során csak egyszer kell végigszkennelni a képet. Primitívek kitöltésének az elve: Balról jobbra haladva minden egyes pásztázó (scan) vonalon kirajzoljuk a primitív belső pontjait (egyszerre egy szakaszt kitöltve)

Grafikus primitívek kitöltése Csúcspontok metszésekor: Oldalak metszésekor az előző módszer viszonylag egyszerű, de mi történik, ha csúcson haladunk át. Ilyen esetben az a szabály, hogy Ha az elmetszett csúcspont lokális minimum (mint a bal felső képen), akkor kétszeresen számítjuk (vagyis egy pillanatra kikerülünk a poligonból, majd visszatérünk belülre). Ha lokális maximum, akkor is kétszer számítjuk, hiszen mielőtt elértük volna ezt a csúcspontot, akkor kívül voltunk, egy pillanatra bekerülünk a poligonba, majd ismét kívülre kerülünk. Különben pedig egyszer számítjuk, hiszen vagy belépünk a poligon belsejébe, vagy kilépünk onnan. Ha a metszett csúcspont lokális minimum vagy maximum, akkor kétszer számítjuk, különben csak egyszer. Téglalap kitöltése A legegyszerűbb eset a téglalap kitöltése, hiszen ez vízszintes szakaszok rajzolásával megtehető. Ahogy a példában is látjuk, az implementációja során csupán egy dupla for-ciklussal kell végigmenni a sarokpontok koordinátái között. for (y = y min ; y < y max, y++) for (x = x min ; x < x max, x++) WritePixel(x,y,value) Probléma: Egész koordinátájú határpontok hova tartozzanak?

Téglalap kitöltése Legyen a szabály pl.: Egy képpont akkor nem tartozik a primitívhez, ha rajta áthaladó él, és a primitív által meghatározott félsík a képpont alatt, vagy attól balra van. Pl.: Vagyis a pásztázó vonalon a kitöltési szakasz balról zárt, jobbról nyitott Téglalap kitöltése Megjegyzések: a) Általánosítható poligonokra b) A felső sor és a jobb szélső oszlop kimarad c) A bal alsó sarok kétszeresen tartozhat a téglalaphoz

Poligonok kitöltése A poligon lehet: Ha általános poligonokat tekintünk, akkor ezek a poligonok lehetnek konvexek, konkávok, önmagukat metsző, illetve lyukas poligonok. A pásztázó módszer minden típusú poligon esetében működik. konvex konkáv önmagát metsző lyukas Haladjunk a pásztázó egyeneseken és keressük a kitöltési szakaszok végpontjait. a) A felezőpont algoritmus szerint választjuk a végpontokat (azaz, nem számít, hogy azok a poligonon kívül, vagy belül vannak) Diszjunkt poligonoknak lehet közös képpontjuk

b) A végpontokat a poligonhoz tartozó képpontok közül választjuk Algoritmus poligonok kitöltésére Minden pásztázó egyenesre: 1. A pásztázó egyenes és a poligon élei metszéspontjainak a meghatározása 2. A metszéspontok rendezése növekvő x-koordinátáik szerint 3. A poligon belsejébe tartozó szakasz(ok) végpontjai közötti képpontok kirajzolása Használjuk a páratlan paritás szabályát: Tegyük fel, hogy a bal szélen kívül vagyunk, utána minden egyes metszéspont megváltoztatja a paritást.

Algoritmus poligonok kitöltésére 3.1. Adott x nem egész értékű metszéspont. Ha kívül vagyunk, akkor legyen a végpont a fölfelé kerekített x Ha belül vagyunk, akkor legyen a végpont a lefelé kerekített x Algoritmus poligonok kitöltésére 3.2. Adott x egész értékű metszéspont Ha ez bal végpont, akkor ez belső pont. Ha ez jobb végpont, akkor ez külső pont A kitöltés során a bal oldali élek mentén a pontok a poligonhoz tartoznak, a jobb oldali végpontok pedig nem tartoznak a poligonhoz. Ez az elv összhangban van azzal, hogy a poligonok felső valamint a jobb oldali élek nem tartoznak a poligonhoz, a bal oldali élek pedig a poligonhoz tartoznak.

Algoritmus poligonok kitöltésére 3.2.1. A poligon csúcspontjaiban: y min csúcspont beszámít a paritásba ymax csúcspont nem számít a paritásba, tehát y max csúcspont csak akkor lesz kirajzolva, ha az a szomszédos él y min pontja is Algoritmus poligonok kitöltésére 3.2.2. Vízszintes él esetén: Az ilyen élek csúcspontjai nem számítanak a paritásba Egész y koordináta esetén az alsó élet rajzoljunk, a felsőt nem

Példa poligon kitöltésére Szilánkok: olyan poligon-területek, amelyek belsejében nincs kitöltendő szakasz = hiányzó képpontok A szilánkok nagyon elfajuló alakú poligonok. Mivel vannak hosszú keskeny csúcsai, ezért előfordulhat, hogy bizonyos részeken nem lesz olyan rácspont, amely a poligon határán belül van. Ugyanakkor más pontok pedig benne lehetnek a poligonban, ezeket ki kell rajzolni. Ez azt eredményezi, hogy látszólag a diszkrét rácson megszakad az objektum.

Implementáció: Nem kell minden egyes pásztázó vonalra újra kiszámolni minden metszéspontot, mert általában csak néhány metszéspont érdekes az i-edik pásztázó vonalról az i + 1-dikre átlépve. A poligon oldalainak egyenleteit a végpontok alapján ismerjük. Nem kell minden pásztázó egyenesre kiszámolni a metszéspontokat, hiszen tudjuk azt, hogy a pásztázó egyenesek pontosan 1 y-koordinátában térnek el egymástól és tudjuk az egyenes meredekségét is, így az x i+1 koordinátát könnyedén kiszámolhatjuk. x i+i = x i + 1 m i Tegyük fel hogy: m > 1 (m = 1 triviális, m < 1 kicsit bonyolultabb) x = 1 m = x max x min y max y min (< 1) x = [x] + {x} egész rész tört rész [x i+1 ] = [x i ] vagy [x i ] + 1 {x i+1 } = {x i + x} vagy {x i } + x 1

Tegyük fel, hogy bal határon vagyunk! Ha {x i } = 0, akkor (x, y)-t rajzolni kell (a vonalon van) Ha {x i } 0, akkor fölfelé kell kerekíteni x-et (belső pont) Egész értékű aritmetika használható: törtrész helyett a számlálót és nevezőt kell tárolni void LeftEdgeScan(int xmin, int ymin, int xmax, int ymax, int value) { int x, y, numerator, denominator, increment; x = xmin; numerator = xmax - xmin; denimonator = ymax - ymin; increment = denominator; for(y = ymin; y < ymax; y++) { WritePixel(x,y,value); increment += numerator; if(increment > denominator) { x++; increment -= denominator; } // END IF } // END FOR }

Adatstruktúrák: ÉT: (Élek táblázata) A kisebbik y értékük szerint rendezve az összes élet tartalmazza. A vízszintes élek kimaradnak! Annyi lista van, ahány pásztázó vonal. Minden listában azok az élek szerepelnek, amelyek alsó végpontja a pásztázó vonalon van. A listák az élek alsó végpontjának x koordinátája, ezen belül a meredekség reciproka szerint rendezettek. Minden lista elem tartalmazza az él y max, x min koordinátáját és a meredekség reciprokát. 11 λ 10 λ 9 λ 8 λ EF DE 7 9 7 5 6 2 11 7 4 6 λ CD 5 11 13 0 λ 4 λ FA 3 9 2 0 λ 2 λ AB BC 1 3 7 5 6 2 5 7 4 0 λ ymax xmin 1 m

AÉT: Aktív Élek Táblázata) A pásztázó vonalat metsző éleket tartalmazza a metszéspontok x koordinátája szerint rendezve. Ezek a metszéspontok kitöltési szakaszokat határoznak meg az aktuális pásztázó vonalon. Ez is lista. Algoritmus poligon kitöltésére 0. ÉT kialakítása 1. y legyen az ÉT-ben lévő nem üres listák közül a legkisebb y 2. AÉT inicializálása (üres) 3. A továbbiakat addig ismélteljük, amíg ÉT végére érünk és AÉT üres lesz: 3.1 ÉT-ből az y-hoz tartozó listát a rendezést megtartva AÉT-hez másoljuk 3.2 AÉT-ből kivesszük azokat az éleket, amelyekre y max = y (a felső éleket nem töltjük ki) 3.3 A kitöltési szakaszok pontjait megjelenítjük 3.4 y = y + 1 3.5 Minden AÉT-beli élben módosítjuk x-et Az 1. lépésben megvizsgáljuk az Élek Táblázatát (ÉT), és csak az első pásztázó egyenes azon az y-koordinátán lesz, amelyik a legkisebb az ÉT-ben. A 2. lépésben az Aktív Élek Táblázata még üres. A 3. lépésben az ÉT-ből sorra vesszük az aktuális pásztázó vonalat metsző éleket, és bemásoljuk őket az AÉT-be. Ezután az AÉT-ből sorra megvizsgáljuk az éleket, és amennyiben az y max érték megfelel az aktuális pásztázó egyenes y koordinátájának, kivesszük az AÉT-ből (hiszen a következő pásztázásnál, amikor y-t növeljük, már nem felette halad a pásztázó egyenes. Figyeljük meg, hogy az x értékeket a 3.5 lépésben mindig módosítjuk, így könnyedén kitölthetjük a pontokat. Az 1 m értéket sem kell mindig újraszámolni, hiszen eltároltuk minden egyes szakaszhoz.

AÉT az y = 8 pásztázóvonalon: 9 2 0 9 4-5 11 9 2 1 x max x m 6 4 11 13 0 λ Megjegyzés: Háromszögekre, trapézokra egyszerűsíthető az algoritmus, mert a pásztázó egyeneseknek legfeljebb 2 metszéspontja lehet egy háromszöggel vagy egy trapézzal (nem kell ÉT).

Kör, ellipszis kitöltése P belül van, ha F (P ) < 0, de most is használható a felezőpont módszer. Hasonló algoritmussal számíthatók a kitöltési szakaszok. Háromszög kitöltése (OpenGL) Egyetlen színnel: glbegin(gl TRIANGLES); glcolor3f(0.1, 0.2, 0.3); glvertex3f(0, 0, 0); glvertex3f(1, 0, 0); glvertex3f(0, 1, 0); glend();

Háromszög kitöltése (OpenGL) Több színnel (Gouraud-féle módon interpolálva): glshademodel(gl SMOOTH); // G-arnyalas glbegin(gl TRIANGLES); glcolor3d(1.0,0.0,0.0); glvertex3d(5.0, 5.0, 0); glcolor3d(0.0,1.0,0.0); glvertex3d(195.0, 5.0, 0); glcolor3d(0.0,0.0,1.0); glvertex3d(100.0, 195.0, 0); glend(); Poligon létrehozása (OpenGL) glbegin(gl POLYGON); glvertex3d(100,0,0); glvertex3d(0,0,0); glend(); Az OpenGL csak síkbeli konvex sokszögek helyes kirajzolását garantálja. Az elsőként specifikált csúcspont színe lesz a primitív színe, ha glshademodel(gl FLAT);

Poligon (OpenGL) 3D-s poligonoknak két oldaluk van: elülső és hátulsó oldal. Alapértelmezésben mindkét oldal ugyanúgy rajzolódik ki, de ezen lehet változtatni: void glpolygonmode(enum face, enum mode); face: GL FRONT AND BACK GL FRONT GL BACK mode: GL POINT csak a csúcspontokat rajzolja ki GL LINE a határvonalat rajzolja ki GL FILL kitölti a poligont