GYAKORLAT. sszeæll totta: VÆrady Lajos varadyl@math.klte.hu



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)

SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

Klár Gergely

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

2D képszintézis. Szirmay-Kalos László

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

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

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

2. Interpolációs görbetervezés

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

Schwarcz Tibor BEVEZETÉS A SZÁMÍTÓGÉPI GRAFIKÁBA. mobidiák könyvtár

Schwarcz Tibor BEVEZETÉS A SZÁMÍTÓGÉPI GRAFIKÁBA. mobidiák könyvtár

Fejezetek a számítógépi grafikából

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

A kör. A kör egyenlete

Számítási feladatok a Számítógépi geometria órához

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

Görbe- és felületmodellezés. Szplájnok Felületmodellezés

. Typeset by AMS -TEX 0

Számítógépes geometria (mester kurzus) III

Grafika. Egyváltozós függvény grafikonja

Lineáris leképezések. Wettl Ferenc március 9. Wettl Ferenc Lineáris leképezések március 9. 1 / 31

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

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]

Analitikus térgeometria

Koordináta-geometria feladatok (emelt szint)

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

, D(-1; 1). A B csúcs koordinátáit az y = + -. A trapéz BD

Gyakorló feladatok a Közönséges dierenciálegyenletek kurzushoz

Transzformációk síkon, térben

Félévi időbeosztás (nagyjából) házi feladat beadási határidőkkel (pontosan) Valószínűségszámítás 2. matematikusoknak és fizikusoknak, 2009 tavasz

Lineáris algebra zárthelyi dolgozat javítókulcs, Informatika I márc.11. A csoport

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

Algoritmusok raszteres grafikához

Valasek Gábor

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

Matematikai programozás gyakorlatok

MATEMATIKA I. RÉSZLETES ÉRETTSÉGI VIZSGAKÖVETELMÉNY A) KOMPETENCIÁK

Geometriai modellezés. Szécsi László

8. előadás. Kúpszeletek

Lineáris algebra - jegyzet. Kupán Pál

Lin.Alg.Zh.1 feladatok

Nemzetközi Magyar Matematikaverseny 2016

A keresett kör középpontja Ku ( ; v, ) a sugara r = 1. Az adott kör középpontjának koordinátái: K1( 4; 2)

MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Közismereti informatika 2.zh T-M szakirány

9. előadás. Térbeli koordinátageometria

Lineáris Algebra gyakorlatok

Programozási alapismeretek (M1,M2)

Fejezetek a lineáris algebrából PTE-PMMK, Műszaki Informatika Bsc. Dr. Kersner Róbert

5. Trigonometria. 2 cos 40 cos 20 sin 20. BC kifejezés pontos értéke?

ADATB`ZIS-KEZEL S. SegØdanyag a gyakorlathoz. sszeæll totta: VÆrady Lajos varadyl@math.klte.hu

Síkbeli egyenesek. 2. Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

Kőszegi Irén MATEMATIKA. 9. évfolyam

Középszintű érettségi feladatsorok és megoldásaik Összeállította: Pataki János; dátum: november. I. rész

Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály, középszint

Matematikai problémák vizsgálata a Maple programcsomag segítségével

Számítógépes Grafika SZIE YMÉK

Haladó lineáris algebra

Görbemodellezés. Interpoláció Approximáció

Matematikai logika. Nagy Károly 2009

4. Felületek Forgásfelületek. Felületek 1. Legyen adott egy paramétersíkbeli T tartomány. A paramétersíkot az u és v koordinátatengelyekkel

Cohen-Sutherland vágóalgoritmus

Tartalom. Geometria közvetlen tárolása. Geometria tárolása - brute force. Valasek Gábor valasek@inf.elte.hu. Hermite interpoláció. Subdivision görbék

Vektorszámítás Fizika tanárszak I. évfolyam

Fejezetek a számítógépi grafikából

Bevezetés. Transzformáció

Lin.Alg.Zh.1 feladatok

Tartalom. Descartes-koordináták. Geometriai értelmezés. Pont. Egyenes. Klár Gergely 2010/2011. tavaszi félév

Geometriai algoritmusok

Elsôfokú egyenletek, egyenletrendszerek, egyenlôtlenségek

Bevezetés. Párhuzamos vetítés és tulajdonságai

Bevezetés a számításelméletbe I. feladatgyűjtemény. Szeszlér Dávid, Wiener Gábor

Látható felszín algoritmusok

Sztojka Miroszláv LINEÁRIS ALGEBRA Egyetemi jegyzet Ungvár 2013

2014/2015. tavaszi félév

Mezei Ildikó-Ilona. Analitikus mértan

Számítógépes geometria

TAN`CS. (InformÆció) (2005/C 58 E/01)

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

Transzformációk. Szécsi László

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Analízisfeladat-gyűjtemény IV.

MIKROÖKONÓMIA I. B. Készítette: K hegyi Gergely, Horn Dániel és Major Klára. Szakmai felel s: K hegyi Gergely június

Vektorok és koordinátageometria

Síkbeli egyenesek Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

V. Koordinátageometria

Számítógépes geometria (mester kurzus)

MATEMATIKA tankönyvcsaládunkat

Első sorozat (2000. május 22. du.) 1. Oldjamegavalós számok halmazán a. cos x + sin2 x cos x. +sinx +sin2x =

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

Algoritmizálás és adatmodellezés tanítása 1. előadás

1.1. Gyökök és hatványozás Hatványozás Gyökök Azonosságok Egyenlőtlenségek... 3

Geometriai algoritmusok

ANALÍZIS II. Példatár

Koordinátageometria. M veletek vektorokkal grakusan. Szent István Egyetem Gépészmérnöki Kar Matematika Tanszék 1

Megoldások, megoldás ötletek (Jensen-egyenlőtlenség)

Megyei matematikaverseny évfolyam 2. forduló

Átírás:

SZ`M T G PI GRAFIKA GYAKORLAT sszeæll totta: VÆrady Lajos varadyl@math.klte.hu

TARTALOM. HASZNÁLT ADATSZERKEZETEK...4. RASZTERES ALGORITMUSOK...5. SZAKASZ RAJZOLÁSA...5.. Egyszerû növekményes algoritmus...5.. Középpontos vonalalgoritmus...6. SZAKASZ LEHATÁROLÁSA..... Cohen-Sutherland algoritmus....3 POLIGONLEHATÁROLÁS (SUTHERLAND-HODGMAN)....4 KÖZÉPPONTOS KÖRRAJZOLÓ ALGORITMUS...4.4. Elmélet...4.4. Program {smidpcir.pas}...5.5 KÖR KITÖLTÉSE {SFILLCIR.PAS}...7.6 TÉGLALAP KITÖLTÉSE {SFILLREC.PAS}...7.7 REKURZÍV KITÖLTÉS {SFLOODFI.PAS}...7.8 ÁLTALÁNOS POLIGON KITÖLTÉSE...8.8. Algoritmus...9.8. Kitöltés mintával... 3. SÍKBELI TRANSZFORMÁCIÓK {SLABDA?.PAS}...3 3. WINDOW TO VIEWPORT TRANSZFORMÁCIÓ {SWINVIEW.PAS}...3 4. KONVEX BUROK ALGORITMUSOK...5 4. GRAHAM PÁSZTÁZÁS (SÍKBAN) {SHULLGRH.PAS}...5 5. INTERPOLÁCIÓ, APPROXIMÁCIÓ...8 5. HERMITE-ÍV...8 5.. Elsõ eset...8 5.. Második eset {shermit.pas}...3 5..3 Kezdeti érintõ meghatározása...3 5. BEZIER GÖRBE...3 5.. de Casteljau algoritmus { sdecast.pas }...3 5.. A görbe elõállítása Bernstein polinommal {sbezier.pas}...33 5..3 Bezier görbe tulajdonságai...33 5..4 Interpoláció Bézier-görbével...33 5..5 Kapcsolódó Bezier görbék...34 5..6 Bezier görbe bevezetése másképpen...34 5.3 3-ADFOKÚ B-SPLINE GÖRBE {S3BSPLN.PAS}...36 5.4 B-SPLINE GÖRBE ÁLTALÁNOS ALAKJA {SBSPLN.PAS, SCOXDEBU.PAS}...39 6. TÉRBELI PONTTRANSZFORMÁCIÓK...4 6. EGYBEVÁGÓSÁGI TRANSZFORMÁCIÓ...4 6. HASONLÓSÁGI TRANSZFORMÁCIÓK...4 6.3 AFFIN TRANSZFORMÁCIÓK...4 6.4 NYÍRÁS...4 7. TÉR SÍKRA VALÓ LEKÉPEZÉSE...43 7. AXONOMETRIA...43

7. CENTRÁLIS PROJEKCIÓ, PERSPEKTÍVA...43 7.. Z tengelyen a C nézõpont az Origótól d távolságra...43 7.. Általános helyzetû nézõpont (alfa, béta, r, d)...44 8. FELÜLETEK ÁBRÁZOLÁSA...45 8. LÁTHATÓSÁG SZERINTI ÁBRÁZOLÁS...45 9. FELÜLET INTERPOLÁCIÓ, APPROXIMÁCIÓ...46 9. BEZIER FELÜLET {BEZIERFE?.PAS}...46 9. B-SPLINE FELÜLET...47 9.. Általános B-spline felület...47 9.. Harmadfokú B-spline felület {bspl3fe?.pas}...47. SÍKLAPOKKAL HATÁROLT TESTEK ÁBRÁZOLÁSA...48. TESTMODELLEZÉS...48.. Drótváz modell {\Polieder\Ztnezop\nemlathato\ }...48.. Felületmodell {\Polieder\Ztnezop\lathato\ }...49. LÁTHATÓSÁG SZERINTI ÁBRÁZOLÁS...5. HÁTSÓ LAPOK KISZÛRÉSE...5. Z BUFFER ALGORITMUS...5.3 SUGÁRKÖVETÉS (RAY TRACING) {POVRAY.DOC}...5.3. Algoritmus...5.3. A metszéspontok meghatározása....53.3.3 Hatékonyságot növelõ módszerek:...53 3

. HasznÆlt adatszerkezetek Type Ponttype=Record X,Y:integer; Type rpointdtype=record x,y:real; rpoint3dtype=record x,y,z:real; Pontsor=array[..N] of ponttype; 4

. Raszteres algoritmusok. Szakasz rajzolæsa.. Egyszerß n vekmønyes algoritmus y y m = = x x y = m x + B y x y = m x + B i+ i+ Ha az m <=, akkor x = -re y lesz (azaz løpøs x-ben egynøl kisebb egyenlı løpøst jelent y-ban). y = m ( x + x) + B = y + m x, i+ i i Ha x =, akkor y = y + m i+ i gy az ( xi, yi ) pont utæn a ( xi +, round( yi + m)) pontot kell megjelen teni. Ha a m >, akkor x = -re y > lesz, (azaz løpøs x-ben egynøl kisebb egyenlı løpøst jelent y-ban). gy y = esetøn x <, azaz y szerint kell løpkedn nk egyesøvel. yi+ B yi + y B y xi+ = = = xi +, m m m Ha y =, akkor xi+ = xi + m gy az ( xi, yi ) pont utæn a ( xi + round, yi + ) pontot kell megjelen teni m HÆtrÆny: Ha egyszer is, de osztæst kell vøgezni ( m y = x ). Az m nem egøsz, gy a programban sem tudunk egøsz t pust hasznælni. A kerek tøs szintøn idıigønyes. 5

.. K zøppontos vonalalgoritmus... ElmØlet y y m = = x x y x y = m x + B y y = x x + B F( x, y) = a x + b y + c d = y x x y + B x = y F(x,y)< F(x,y)= F(x,y)> x Ha m, akkor x = -re y < lesz (azaz løpøs x-ben egynøl kisebb løpøst jelent y- ban). Q NE M P=(x p, y p) E Ha d p+ = F x p + y p +, >, akkor a P utæn az NE pontot gyœjtjuk ki. Ha d p+ = F x p +, y p + <, akkor a P utæn az E pontot gyœjtjuk ki. 6

Ha d p+ = F x p +, y p + =, akkor a P utæn az E pontot gyœjtjuk ki (megællapodæs szerint). Ha minden x szerinti løpøsben az ( x p+, y p+ ) pontot behelyettes tenønk az F-be, akkor a sok mßvelet miatt lassœ lenne a szæm tæs, ezørt pr bæljuk meg meghatærozni a d p+ ØrtØkØt a d p+ ØrtØkØbıl. Ennek meghatærozæsæhoz køt esetet kell figyelembe venn nk: a) E-t vælasztottuk az x p+ pontban ( ) d p+ = F x p + y p + a x p b y p c = + + +, + ( ) d p+ = F x p + y p + a x p b y p c = + + +, + E = d d = a = y p+ p+ b) NE-t vælasztottuk az x p+ pontban ( ) 3 d p+ = F x p + y p + a x p b y p c = + + + 3, + ( ) d p+ = F x p + y p + a x p b y p c = + + +, + NE = d d = a + b = y x p+ p+ MeghatÆroztuk, hogy az x szerint løpkedve, hogyan væltozik a d az elızı x d ØrtØkØre alapozva. MostmÆr csak a d kezdeti ØrtØkØt kell meghatæroznunk. Az elsı køppontunk a szakasz egyik vøgpontja, legyen ez ( x, y ) Az elsı k zøppont x +, y + -nøl van, Øs gy ( ). b b F x +, y + = a x + b y + c + a + = F( x, y) + a +. Mivel ( x, y ) a vonalon van, az F x, y =, gy a d kezd b x = a + = y. A t rtek elker løsøhez szorozzuk meg az F f ggvøny ØrtØkØt -vel.... Algoritmus {smidplin.pas} procedure MidpointLine(x,y,x,y:integer;color:word); Var x,y,dx,dy,ince,incne,d:longint; dx:=x-x; dy:=y-y; d:= *dy-dx; 7

ince:=*dy; incne:=*(dy-dx); x:=x; y:=y; setpixel(x,y,color); while x<x do if d<= then inc(d,ince);inc(x);end else inc(d,incne);inc(x);inc(y); setpixel(x,y,color); KØsz ts k el a programot œgy, hogy tetszıleges meredeksøgß egyenesre mßk dj n.. LØpØs: A tetszıleges meredeksøgß szakasz vøgpontjait az elsı s knyolcadba transzformæljuk..-b l az.-be Y = X tengelyre t kr zøs ( x, y) ( y, x) 3.-b l az.-be Y tengelyre t kr zøs Y = X tengelyre t kr zøs ( x, y) ( x, y) ( y, x) 4.-bıl az.-be Y tengelyre t kr zøs. ( x, y) ( x, y). LØpØs: A szakasz vøgpontjait X koordinætæjuk szerint rendezz k (p,p). 3. LØpØs: HasznÆljuk az eredeti Midpointline algoritmust. procedure csere(var x,y,x,y:integer); var x,y:integer; x:=x;x:=x;x:=x; y:=y;y:=y;y:=y; Procedure transzyt(var x,y:integer); {X=} var s:integer; x:=-x; Procedure transzxyt(var x,y:integer); {X=Y} var s:integer; s:=x;x:=y;y:=s; procedure linepoints(x,y:integer;color:word;nyolcad:nyolcadtipus); case nyolcad of : transzxyt(x,y); 3: transzxyt(x,y);transzyt(x,y); 8

4: transzyt(x,y); putpixel(x+origox,-y+origoy,color); procedure MidpLine(x,y,x,y:integer;color:word;nyolcad:nyolcadtipus); Var dx,dy,ince,incne,d:longint; x,y:integer; dx:=x-x; dy:=y-y; d:= *dy-dx; ince:=*dy; incne:=*(dy-dx); x:=x; y:=y; linepoints(x,y,color,nyolcad); while x<x do if d<= then inc(d,ince);inc(x);end else inc(d,incne);inc(x);inc(y); linepoints(x,y,color,nyolcad); Procedure Xsorba (var x,y,x,y:integer); if x>x then csere(x,y,x,y); Procedure Teszt(var x,y,x,y:integer;var nyolcad:nyolcadtipus); Var dx,dy:integer; dx:=x-x; dy:=y-y; if DX= then nyolcad:=;transzxyt(x,y);transzxyt(x,y);end else if (<=DY/DX) AND (DY/DX<=) then nyolcad:=; if (-<=DY/DX) AND (DY/DX<) then nyolcad:=4;transzyt(x,y);transzyt(x,y); if (DY/DX>) then nyolcad:=;transzxyt(x,y);transzxyt(x,y); if (DY/DX<-) then nyolcad:=3;transzyt(x,y);transzyt(x,y); transzxyt(x,y);transzxyt(x,y); 9

procedure MidpointLine(x,y,x,y:integer;color:word); Var nyolcad:nyolcadtipus; Teszt(x,y,x,y,nyolcad); Xsorba(x,y,x,y); MidpLine(x,y,x,y,yellow,nyolcad); A Pascalban: Line (x, y, x, y: Integer); Linerel (Dx, Dy: Integer); LineTo (X, Y: Integer); SetLineStyle (LineStyle: Word; Pattern: Word; Thickness: Word);. Szakasz lehatærolæsa.. Cohen-Sutherland algoritmus... ElmØlet f R S V [j] a K' [a] U K'' [] T V' [] K [a,b] b j Az algoritmus folyamatæbræja

Start R, S, U, T; K, V A sík 9 részre vágása, a kódok (b,a,j,f) hozzárendelése a síkrészekhez K-hoz és V-hez a kódok hozzárendelése K d( K) I K d( V) Yes K, V I R, S, U, T = Stop No K: = K, V I K k dbeli egyenes Yes K d( K) No V: = K, V I V k dbeli egyenes Yes K d( V ) No K, V szakasz kirajzolása Stop... Program {scohsuth.pas} procedure Clip (bax,bay,jfx,jfy,x,y,x,y:real;color,linestyle,thickness:word ); type el=(bal,jobb,also,felso); kodok=set of el; Var c,c,c:kodok;x,y:real; label return; Procedure Kod(x,y:real;var c:kodok); c:=[]; if x<bax then c:=[bal] else if x>jfx then c:=[jobb]; if y<bay then c:=c+[also] else if y>jfy then c:=c+[felso];

{Clip} kod(x,y,c);kod(x,y,c); segment(round(x),round(y),round(x),round(y),color,dottedln,n ormwidth); while (c<>[]) or (c<>[]) do if (c*c)<>[] then goto return; c:=c; if c=[] then c:=c; if bal in c then {metszes a bal elen} y:=y+(y-y)*(bax-x) / (x-x); x:=bax; end else if jobb in c then {metszes a jobb elen} y:=y+(y-y)*(jfx-x) / (x-x); x:=jfx; end else if also in c then {metszes also elen} x:=x+(x-x)*(bay-y) / (y-y); y:=bay; end else if felso in c then {metszes felso elen} x:=x+(x-x)*(jfy-y) / (y-y); y:=jfy; if c=c then circle(origox+round(x),- round(y)+origoy,4);x:=x;y:=y;kod(x,y,c);end else circle(origox+round(x),- round(y)+origoy,4);x:=x;y:=y;kod(x,y,c); segment(round(x),round(y),round(x),round(y),color,linestyle, thickness); return:.3 PoligonlehatÆrolÆs (Sutherland-Hodgman) (Tetszıleges poligont væg konvex poligonra.)

vágandó poligon IV III vágó poligon I II 3 4. eset. eset 3. eset 4. eset Belseje Külseje Belseje Külseje Belseje Külseje Belseje Külseje s p s r p p s p r s vágóél vágóél vágóél vágóél Output: p Output: r Output:- Output: r, p Procedure SatHod(Input_poligon:pontsor;Var output_poligon:pontsor;inputhossz:integer; Var outputhossz:integer;vagoel:integer); {egy væg Ølre vægja az input_poligont} Var s,p,r:pointtype; j:integer; outputhossz:=; s:=input_poligon[inputhossz]; for j:= to inputhossz do p:=input_poligon[j]; if belseje(p,vagoel) then {,4 eset} if belseje(s,vagoel) then { eset} output(p,outputhossz,output_poligon) else {4 eset} metszes(s,p,vagoel,r); ouput(r,outputhossz,output_poligon); 3

ouput(p,outputhossz, output_poligon); end else {,3 eset} if belseje(s,vagoel) then {} metszes(s,p,vagoel,r); ouput(r,outputhossz, output_poligon); s:=p; {for} Begin For VE=I to IV do SatHod(vÆgand _poligon,vægott_poligon,4,outputhossz,ve); vægand _poligon:= vægott_poligon; End. A Pascalban: DrawPoly (NumPoints: Word; var PolyPoints);.4 K zøppontos k rrajzol algoritmus.4. ElmØlet (-x,y) (x,y) R R, (-y,x) R (y,x) (-y,-x) (y,-x) (-x,-y) (x,-y) F( x, y) = x + y R 4

F(x,y)> F(x,y)< R F(x,y)= P=(x p, y p) E M SE M M d p F M F xp yp xp yp R = + + + ( ),, akkor SE-t, Ha + = = + ( ) egyøbkønt az E-t vælasztjuk. a) E-t vælasztottuk az x p+ pontban ( ) d p+ = F xp + yp xp yp R = + +, E = d d = x + 3 p+ p+ p b) SE-t vælasztottuk az x p+ pontban ( ) 3 d p+ = F xp + yp xp yp R = + + 3, SE = d d = x y + 5 p+ p+ p p MeghatÆroztuk, hogy az x szerint løpkedve, hogyan væltozik a d az elızı x d ØrtØkØre alapozva. MostmÆr csak a d kezdeti ØrtØkØt kell meghatæroznunk. Az elsı køppontunk a (, R ). Az elsı k zøppont,r -nøl van, Øs gy 5 dkezd = F, R = + R R + R = R. 4 4.4. Program {smidpcir.pas} procedure Circlepontok(centrumx,centrumy,x,y:integer;c:word); setpixel(x+centrumx,y+centrumy,c); setpixel(y+centrumx,x+centrumy,c); setpixel(y+centrumx,-x+centrumy,c); 5

setpixel(x+centrumx,-y+centrumy,c); setpixel(-x+centrumx,-y+centrumy,c); setpixel(-y+centrumx,-x+centrumy,c); setpixel(-x+centrumx,y+centrumy,c); setpixel(-y+centrumx,x+centrumy,c); procedure MidPointCircle(centrumx,centrumy,r:integer; szin:word); var d:integer;x,y:integer; x:=; y:=r; d:=-r; Circlepontok(centrumx,centrumy,x,y,szin); while y>x do if d< then d:=d+*x+3; inc(x); end else d:=d+*(x-y)+5; inc(x); dec(y); Circlepontok(centrumx,centrumy,x,y,szin); A Pascalban: Arc (X,Y: Integer; StAngle, EndAngle, Radius: Word); Circle (X,Y: Integer; Radius: Word); GetArcCoords (var ArcCoords; _ArcCoordsType_); 6

.5 K r kit ltøse {sfillcir.pas} (-x,y) (x,y) R R, (-y,x) R (y,x) (-y,-x) (y,-x) (-x,-y) (x,-y).6 TØglalap kit ltøse {sfillrec.pas} Csak a bal oldali, Øs az als Øleket rajzoljuk ki. Procedure FillRec(xmin,ymin,xmax,ymax:integer;color:word); var x,y:integer; for y:=ymin to ymax do for x:=xmin to xmax do setpixel(x,y,color);.7 Rekurz v kit ltøs {sfloodfi.pas} procedure flood_fill(x,y:integer;hatterszin,szin:word); if getpixel(x,y)=hatterszin then putpixel(x,y,szin) flood_fill(x+,y,hatterszin,szin); flood_fill(x-,y,hatterszin,szin); flood_fill(x,y+,hatterszin,szin); flood_fill(x,y-,hatterszin,szin); A Pascalban: procedure FloodFill (x,y: Word; BorderColor: Word); 7

.8 `ltalænos poligon kit ltøse SzØlsı pixel A kit ltøsi algoritmus løpøsei: Belsı pixelek. A scan-line metszøspontjainak meghatærozæsa a polygon minden ØlØvel.. A metszøspontok rendezøse x kordinæta szerint. 3. Azon pixelek kit ltøse a metszøspontok k z tt, melyek a poligon belsejøben fekszenek, hasznælva egy paritæs bitet. 8

ProblØmÆk: 3. Nem egøsz kordinætæjœ metszøspont esetøn hogyan Ællap that meg, hogy melyik oldalon løvı pixel tartozik a poligon belsejøbe? 3. Hogyan kezelhetık az egøsz koordinætæjœ metszøspontok? 3.3 Hogyan kezelhetıek a 3. beli pontok k z s Øl esetøn? 3.4 Hogyan kezelhetıek a 3. beli pontok vizszintes Øl esetøn? MegoldÆsok: 3. Bal oldal felfelø, jobb oldal lefelø kerek tøssel 3. A bal oldali pixelt belsınek, a jobb oldalit k lsınek tekintj k. 3.3 Egy Ølre vonatkoz an csak az y min csœcsot rajzoljuk ki, az y max csœcsa az Ølnek akkor lesz kirajzolva, ha az y min csœcsa egy mæsik Ølnek. 3.4 Hasonl an a tøglalaphoz az als Ølek ki lesznek rajzolva, a felsı Ølek viszont nem..8. Algoritmus Az ET (Øl tæbla) lista: nil EF 7 9 7-5/ DE 7 6/4 nil CD 5 3 nil FA 3 9 nil AB BC 3 7-5/ 3 7-5/ nil y koord. Ymax Xmin /m ET Az y koordinætæk az Ølek alacsonyabb csœcsænak y koordinætæja Az ymax az Øl maximælis y koordinætæja Az xmin az Øl alacsonyabb csœcsænak az x koordinætæja /m az Øl meredeksøge 9

A vizszintes lista Ølei xmin koordinætæjuk szerint vannak rendezve Az AET (akt v Øl tæbla) lista:. T lts k fel az ET listæt.. Legyen y az ET lista elsı elemønek az y-ja. 3. InicializÆljuk resnek az AET listæt. 4. IsmØtelj k a k vetkezıket, am g az ET Øs AET listæk resek nem lesznek: 4. Tegy k az AET listæba azokat az Øleket, amelyekre y= y min, majd rendezz k az az AET-ben løvı Øleket az x koordinæta szerint. 4. Rajzoljuk ki az y scan line-t, az AET-ben løvı x koordinætapærok k z tt, figyelembe vøve a paritæst. 4.3 y:=y+ 4.4 TÆvol tsuk el azokat az eleket az AET-bıl, amelyekre y= y max. 4.5 Minden nem f ggıleges AET-beli Ølre x:=x+ m. Sz ksøges adatszerkezetek: {dfillpol.pas} Type Elmutato=^El; El=record ymax:integer; xmin:real; xmer:real; Elre:Elmutato; ETmutato=^ETelem; ETelem=record y:integer; ETre:ETmutato; Elre:Elmutato;

.8. Kit ltøs mintæval Kit ltøs mintæval Scan-konverzi t hasznælva ProblØma: a minta melyik pixele rendelıdj n hozzæ az aktuælis pixelhez. a minta bal elsı pixeløt rendelj k a poligon egy csœcsæhoz. SRGP esetøn a teljes køpernyıt az adott mintæval kit lt ttnek feltøtelezz k, Øs a kit ltendı ter leten ÆtlÆtszatjuk. MxN-es minta esetøn a køpernyı orig jæhoz a Minta(,) pixeløt rendelj k, egy x,y ponthoz pedig a minta minta[x div M, y div N] pixeløt. Kit ltøs mintæval ismøtelt Scan-converzi nølk l `tmæsoljuk a kit ltenı ter letet egy tøglalap tartomænyra, Øs ezen tartomæny minden pixeløt a megfelelı helyre rjuk. A Pascalban: procedure DrawPoly(NumPoints: Word; var PolyPoints); procedure FillPoly(NumPoints: Word; var PolyPoints); Sets the fill pattern and color. Declaration: procedure SetFillStyle(Pattern: Word; Color: Word); Selects a user-defined fill pattern. Declaration: procedure SetFillPattern(Pattern: FillPatternType; Color: Word); Gets the current fill pattern and color, as set by SetFillStyle or SetFillPattern. Declaration: procedure GetFillSettings(var FillInfo: FillSettingsType); FillPatternType Record that defines a user-defined fill pattern; used by GetFillPattern and SetFillPattern. Declaration: FillPatternType = array [..8] of Byte; Fill Pattern Constants Use these constants as fill patterns for GetFillSettings

and SetFillStyle. Constant Value Meaning EmptyFill Uses background color SolidFill Uses draw color LineFill --- fill LtSlashFill 3 /// fill SlashFill 4 /// thick fill BkSlashFill 5 \thick fill LtBkSlashFill 6 \fill HatchFill 7 Light hatch fill XhatchFill 8 Heavy cross hatch InterleaveFill 9 Interleaving line WideDotFill Widely spaced dot CloseDotFill Closely spaced dot UserFill User-defined fill

Window to Viewport eltolæs forgatæs tengelyek k r l skælæzæs 3. S kbeli transzformæci k {slabda?.pas} 3. Window to Viewport transzformæci {swinview.pas} y ( x, y ) max max y v v ( u, v ) max max ( xmin, ymin) ( umin, vmin) x x u u Világkoordináta rendszer Eltolás az origóba Skálázás Eltolás 3

M wv T u v S u max u min v max v min = ( min, min ), T( x min, y min ) = x x y y u v u x max max min min u x max max max min max min umin xmin x v max v min y y y max min u min u max u x min x min x max x v max v min v max v ymin ymax y min y max y + u + v min min = umax u min v max v min P = ( x xmin ) + u min, ( y y min ) + v min, x x y y max min max min min min min min min min 4

4. Konvex burok algoritmusok 4. GRAHAM pæsztæzæs (s kban) {shullgrh.pas} ( ) BonyolultsÆg: O n log( n) Adott: p, p,..., p n s kbeli pontok Q halmaza. Feladat: p, p,..., p n pontok KB(Q) konvex burkæt (az a legszßkebb konvex poligon, amely vagy belsı pontkønt vagy csœcspontkønt tartalmazza az sszes p, p,..., p n pontot) elıæll tani. Sz ksøges adatszerkezetek: P: a p, p,..., p n pontok S: verem, amiben a KB(Q) pontok keletkeznek. A P Øs S implementælhat k t mbbel vagy køtirænyœ læncolt listæval. Sz ksøges eljæræsok: procedure INIT(var S): resnek inicializælja a vermet. procedure PUSH(var S,E): a verem tetejøre tesz egy E elemet. procedure POP(var S): eltævol tja a verembıl a legfelsı elemet. function TOP(S): visszaadja a verem a legfelsı elemøt, de nem tævol tja el. function TOP(S): visszaadja a verem a legfelsı alatti elemøt, de nem tævol tja el. Algoritmus løpøsei:. Legyen p a Q-nak minimælis y koordinætæjœ pontjai k z l a legbaloldalibb 5

. Legyen p,..., p n (Q t bbi pontja), a p -ra vonatkoz polærsz geik szerint rajæræssal ellentøtes sorrendben rendezve p k r l. Ha t bb pontnak is ugyanaz a polærsz ge, akkor csak a p -t l legtævolabbi pontot tartjuk meg tovæbbi feldolgozæsra. 3. INIT(S); 4. PUSH(S,p ); 5. PUSH(S,p ); 6. PUSH(S,p ); 7. FOR j:=3 to n DO BEGIN END; WHILE TOP(S),TOP(S),p j pontok alkotta sz g nem bal fordulatot vøgez DO POP(S); PUSH(S, p j ) PolÆrsz g szerinti rendezøs:. A rendezøs miatt a P adatszerkezet elemei tartalmazzæk a k vetkezı informæci kat: x 6

y polærsz g, tævolsæg p -t l. Minden p j -re szæmoljuk ki a polærsz get, Øs a p -t l val tævolsægot 3. Rendezz k a p,..., p n pontokat polærsz geik szerint n vekvı sorrendbe, majd az azonos polærsz gß pontok k z l csak a p -t l legtævolabbit tartsuk meg. A vektoriælis szorzæst hasznæljuk a polærsz gek kiszæm tæsæhoz. r r [ a, b] = r z ( ya zb za yb, za xb xa zb, xa yb ya xb ), ahol a r, b r Øs r z jobbrendszert alkotnak, és r z = r r r r a b sin( a, b). Pj (xj,yj) b P (x,y) a T (x+,y) Az Æbra alapjæn a(,,), b( x j - x, y j - y,) ad dik. gy a p j -hez tartoz y j y arcsin, ha x j x ( x j x ) + ( y j y ) polærsz g = y j y Π arcsin, egyøbkønt ( x j x ) + ( y j y ) Balra fordulæs: A vektoriælis szorzattal k nnyen eld nthetı. 7

5. InterpolÆci, approximæci 5. Hermite- v 5.. Elsı eset Adott køt pont, p Øs p, valamint a køt pontban az Ørintı vektorai, t Øs t. t p p t Egy harmadfokœ polinomiælis g rbøt keres nk, melynek egyenlete a k vetkezı alakœ: 3 S( u) = a u + a u + a u + a u [, ]. 3 Ebben az egyenletben nøgy ismeretlen szerepel, ugyanakkor meg tudunk adni nøgy egyenletet, melyek a kezdeti feltøteleket rjæk le. Ezek: S( ) = p S( ) = p S&( ) = t S& ( ) = t Az egyenletrendszer megoldæsa: 8

S( ) = p = a S( ) = p = a + a + a + a S&( ) = t = a S&( ) = t = 3 a + a + a p t 3 3 = a + a + t + p a = p p t a = 3 a + a + t t = 3 p 3 t 3 p 3 a + a + t a = 3 p 3 p t t a = p p + t + t ====================== A megoldæsok behelyettes tøse: 3 S( u) = ( p p + t + t ) u + ( 3 p + 3 p t t ) u + t u + p 3 u x( u) u S( u) = GH MH U [ p, p, t, t ] MH MH? y( u) = = = u S( ) = p = GH MH S( ) = p = GH MH 3 S& ( ) t GH MH S& = = ( ) = t = GH MH 3 3 p p t t = GH = GH MH M H = [ ] 3 3 u x( u) u S( u) = GH MH U [ p, p, t, t ] y( u) = = 3 u Az egyenlet ÆtrendezØse: 3 S( u) = ( u 3u + ) p + ( u + 3u ) p + ( u u + u) t + ( u u ) t u [, ] 3 3 3 9

Az egyenletben szereplı egy tthat polinomokat Hermite-polinomoknak nevezz k, Øs a k vetkezıkøppen jel lj k: 3 H = u 3u + H = u + 3u 3 H = u u + u H = u u 3 3 3 Az egysøgesebb szemløletm d miatt fel rhatjuk a g rbøt mætrix alakban is: p 3 3 p 3 S( u) = ( u u u ) t t 5.. MÆsodik eset {shermit.pas} Adott hærom pont, p Øs p, p valamint az elsı pontban az Ørintı vektora, t. p t p p Egy harmadfokœ polinomiælis g rbøt keres nk, melynek egyenlete a k vetkezı alakœ: 3 S( u) = a u + a u + a u + a u [, ]. 3 Ebben az egyenletben nøgy ismeretlen szerepel, ugyanakkor meg tudunk adni nøgy egyenletet, melyek a kezdeti feltøteleket rjæk le. Ezek: S( ) = p S( ) = p S( ) = p S&( ) = t Az egyenletrendszer megoldæsa: 3

S( ) = p = a + a a + a S( ) = p = a S( ) = p = a + a + a + a3 S&( ) = t = 3 a a + a p t p 3 3 p = a + a a = 3 a a + a p = a + a + a 3 = + = p 4 p + p + t p p a a a a 4 p p + t = 5 p + 4 p + p t 3 3 = a a a 4 p + p p p + p p = a a = ===================== A megoldæsok behelyettes tøse: 3p 4p + p + t S( u) = 4 3p 4p + p + t S( u) = 4 p p + p u + p 4p + p u + 4 + 5p + 4p u + p t 4 3 + 5p + 4p u + p t 4 3 3 u x( u) u S( u) = GH MH U [ p, p, p, t ] MH MH? y( u) = = = u S( ) = p = GH MH S( ) = p = GH MH 3 S( ) = p = GH MH S& ( ) = t = GH MH 3 3 p p t = GH = GH MH M H = [ p ] u + p 4 u + p 4 3

3 5 3 4 4 u x( u) u S( u) = GH MH U [ p, p, p, t ] y( u) = = u 4 4 5..3 Kezdeti Ørintı meghatærozæsa I. II. e d/ p e p d p p p p 5. Bezier g rbe Adottak: p,..., p n approximæland pontok a s kban (vagy tørben), Øs u R. 5.. de Casteljau algoritmus { sdecast.pas } i p = p ( i =,,..., n) r i i r i r i+ p ( u) = ( u) p ( u) + u p ( u) ( r =,.., n Øs i =,,..., n r) A g rbe u = 3 paramøterhez tartoz pontjænak megszerkesztøse a de Casteljau algoritmussal. Az gy meghatærozott p n ( u) pont a Bezier g rbe u paramøterhez taroz pontja. p p p p p p 3 p p p 3 p 3

5.. A g rbe elıæll tæsa Bernstein polinommal {sbezier.pas} n S( u) = p B ( u) (u [,]) a Bezier g rbe u paramøterhez tartoz pontja, ahol a B j= j n j n ( u) = u ( u) j a Bernstein polinom. n j n j j 5..3 Bezier g rbe tulajdonsægai Bersnstein polinom tulajdonsægai! A Bezier g rbe kontrollpontjainak affin transzformæci jæra invariæns (k vetkezik a de Casteljau-fØle elıæll tæsb l). Ha u [, ], akkor a Bezier g rbe kontrollpontjainak konvex burkæn bel l van. A Bezier g rbe az elsı Øs utols kontrollponton Æthalad. Bezier g rbe szimmetrikus. Ha u [, ] akkor ezen g rbe kezdı- Øs vøgørintıje: d du p n p p d ( ) = ( ) du p ( ) = n ( p n p n ) ApproximÆl g rbe ugyanakkor igaz a k vetkezı tulajdonsæg is: a BØzier-g rbønek bærmely s kkal legfeljebb annyi metszøspontja van, ahæny pontban a s k a kontrollpoligont metszi. Az eljæræs tehæt, amint azt a køpletbıl k nnyen læthatjuk, n pontot n--edfokœ g rbøvel approximæl, azaz a kontrollpontok szæmænak n vekedøsøvel nı a poligon fokszæma is. 5..4 InterpolÆci BØzier-g rbøvel Mint mær eml tett k, a BØzier-g rbe a kontrollpontok k z l csak az elsıre Øs az utols ra illeszkedik, a t bbit approximælja. Most egy olyan eljæræst mutatunk be, mely adott pontokhoz olyan BØzier-g rbøt szæm t ki, amely az adott pontok mindegyikøn Ætmegy. Ezt œgy Ørj k el, hogy feltøtelezz k az adott pontokr l, hogy a g rbe pontjai, majd ebbıl visszaszæmoljuk a kontrollpontokat. Legyen adott a p,p,p,...,p n pontsorozat, valamint a u, u,..., u n [, ] szæmok. Keress k azt az S(t) BØzier-g rbøt, amelyre S( u ) = p i =,..., n i Ezek a feltøtelek a b,b,b,...,b n kontrollpontokra a k vetkezı egyenleteket adjæk: n i n S( u ) = b B ( u ) i =,..., n i j j j= Ez az egyenletrendszer a Bernstein-polinomok lineæris f ggetlensøge miatt egyørtelmßen megoldhat a b j kontrollpontokra mint ismeretlenekre nøzve, Øs az ezekkel fel rt BØzierg rbe az eredeti pontok mindegyikøt interpolælni fogja. i 33

5..5 Kapcsol d Bezier g rbøk Tegy k fel, hogy køt harmadfokœ BØzier-g rbe szegmenst akarunk csatolni. Ezek nøgy-nøgy kontrollponttal rendelkeznek, ezek helyzetøre kell megszor tæsokat tenn nk a csatlakozæs folytonossægæhoz. Tekints k az a,a,a,a 3 Øs b,b,b,b 3 kontrollpontok Æltal meghatærozott a( u) b( u) u [, ] BØzier-szegmenseket. Ezek minden pontjukban mæsodrendben folytonosak, a kapcsol dæsnæl tehæt megk vetelhet nk nulladrendß (C ), elsırendß (C ), illetve mæsodrendß (C ) folytonossægot. A nulladrendß folytonossæghoz elegendı, hogy az elsı szegmens vøgpontja megegyezzen a mæsodik szegmens kezdıpontjæval, azaz: a() = b() Øs mivel ezen g rbepontok megegyeznek a megfelelı kontrollpontokkal, hiszen a BØzier-g rbe a vøgpontokat interpolælja, ezørt a 3 = b kell, hogy teljes lj n. Az elsırendß folytonossæghoz az Ørintıknek kell megegyezni k, azaz d d a( ) = b( ) kell, du du hogy teljes lj n. Ez a kontrollpontokra az (a 3 - a ) = (b - b ) feltøtelt jelenti, azaz, amellett, hogy a køt szegmens kezdı- Øs vøgpontja megegyezik, az a, a 3 =b, b pontoknak kollineærisaknak kell lenni k Øs az a 3 pontnak feleznie kell az a b szakaszt. A mæsodrendben folytonos kapcsol dæshoz a fenti feltøteleken k v l a k vetkezınek kell d d teljes lnie: a( ) = b( ) Ez a kontrollpontokra nøzve a k vetkezıt jelenti: du du ((a 3 - a ) - (a - a )) = ((b - b ) - (b - b )) ami geometriai szempontb l azt jelenti, hogy az a a egyenes Øs a b b egyenes m metszøspontjæra teljes l, hogy a felezi az a m szakaszt, b pedig felezi az mb szakaszt. 5..6 Bezier g rbe bevezetøse mæskøppen Adottak: p, p, p, p3 approximæland pontok a s kban (vagy tørben), u R, 34

t = S&( ) = 3( p p ), t = S&( ) = 3( p p ) G = [ p p p p ] B G = G M H B HB 3 3 3 3 3 G = [ p p t t = p p p p 3 3] [ 3] = G M 3 3 A Bezier matrix: M = M M H B HB B HB H S( u) = G M U = ( G M ) M U = G ( M M ) U = G M U H H B HB H 3 3 3 6 3 M = M M = B HB H 3 3 B HB H B B S( u) = G M U = ( t) p + 3t( t) p + 3t ( t) p + t p B B 3 3 3 35

5.3 3-adfokœ B-spline g rbe {s3bspln.pas} Kontroll pontok: P,P,,P m-, P m m 3 A løtrehozand vek: Q 3,Q 4,,Q m-, Q m A t paramøter:q i v esetøben t i t t i+, ahol 3 i m. A Q i vet meghatæroz pontok: P i-3, P i-,,p i-, P i,azaz [ ] G = P P P P, i m Bsi i 3 i i i 3 Q 3 v esetøn: P, P, P, P 3 t 3 =, t 4 = Q 4 v esetøn: P, P, P 3, P 4 t 4 =, t 5 =. Q i v esetøn: P i-3, P i-, P i-, P i t i =i-3, t i+ =i-. Q m v esetøn: P m-3, P m-, P m-, P m t m =m-3, t m+ =m- Az i. szegmens tehæt t=t-t i paramøter transzformæci utæn: Qi ( t) = X( t) Pi 3 + X( u) Pi + X( u) Pi + X3( u) Pi i = 3, 4,..., m t [, ] alakœ, ahol az X j (u)-k egyelıre ismeretlen harmadfokœ polinomok. Tudjuk azonban, hogy az egymæs utæn k vetkezı szegmenseknek mæsodrendben kell kapcsol dniuk. A nulladrendß kapcsol dæs miatt minden i-re teljes lnie kell, hogy Q i () = Q i+ (), amibıl: 36

X X X X ( ) = X ( ) = 3 ( ) = X ( ) ( ) = X ( ) ( ) = X ( ) 3 Ehhez hasonl an a C Øs C folytonossæghoz valamennyi i-re teljes lnie kell, hogy Q& ( ) = Q& + ( ) Øs Q&& ( ) = Q&& + ( ), amikbıl: i X& ( ) & = X 3 ( ) = X& ( ) & = X ( ) X& ( ) X& = ( ) X& ( ) = X& ( ) Øs 3 X&& ( ) && = X 3 ( ) = X&& ( ) && = X ( ) X&& ( ) X&& = ( ) X&& ( ) = X&& ( ) 3 i i i Cauchy-egyenletet, hogy invariæns legyen a koordinæta-transzformæci ra: X ( t) + X ( t) + X ( t) + X ( t) 3 akkor 6 lineærisan f ggetlen egyenletet kapunk. Mivel az X j ( t) polinomokat harmadfokœaknak tøtelezz k fel, ezørt sszesen 6 ismeretlen nk van, tehæt az egyenletrendszer egyørtelmßen megoldhat. MegoldÆskØnt a k vetkezı polinomokat kapjuk: 3 X( t) = ( t 6 ) 3 X( t) = ( t t 6 3 6 + 4 ) 3 X( t) = ( 3t + 3t + 3t + ) 6 3 X3( t) = t 6 Q 3 i r i 3+ r r= ( t) = X ( t) P, t [, ] i = 3,..., m 37

Ugyanez mætrixos fel ræsban: T=[t 3 t t ] T 38

Q i ( t) = G Bsi M Bs T i, t < M Bs = 3 3 3 3 6 3 6 3 3 4 [ ] T B Bs = M T = B B B B Bs Bs 3 Bs Bs Bs = T ( t t t + t + t + t + t t < 6 ) 3 3 3 6 4 3 3 3 3 3. 5.4 B-spline g rbe ÆltalÆnos alakja {sbspln.pas, scoxdebu.pas} 39

6. TØrbeli ponttranszformæci k 6. EgybevÆg sægi transzformæci EltolÆs d( dx, dy, dz) vektorral dx M = d y d z ElforgatÆs α sz ggel x tengely k r l M = cosα sinα sinα cosα y tengely k r l z tengely k r l cosα sinα M = sinα cosα cosα sinα M = sinα cosα 4

T kr zøs az {x,y} s kra M = 6. Hasonl sægi transzformæci k Kicsiny tøs, nagy tæs orig k zøpponttal λ M = λ λ j 6.3 Affin transzformæci k SkÆlÆzÆs λ M = µ ν j 4

6.4 Ny ræs p = p + λ d t = p + ( λn p) t MÆtrix reprezentæci ban: x y z + λtxnx λtxny λtxnz x + = λtynx λt yny λt ynz y λt n t n + t n z z x λ z y λ z z 4

7. TØr s kra val lekøpezøse 7. Axonometria Axonometria P( x, y, z) P ( u, v) : u a a a v = a a a 3 3 x y z Kavalier axonometria: x u q y v cos( α) = q sin( α) z q: az x szerinti rovidules α: x tengely y tengellyel bezært sz ge 7. CentrÆlis projekci, perspekt va 7.. Z tengelyen a C nøzıpont az Orig t l d tævolsægra P y x y P c P y c z P x c d z P z O C c x x d d Px C Px C = ; = ; = d z d z P C P C c c c y y x d d = x ; y = y ; z = d z d z c c c 43

7.. `ltalænos helyzetß nøzıpont (alfa, bøta, r, d) 44

8. Fel letek ÆbrÆzolÆsa z = f ( x, y ) f ggvønyfel letek (x, y) [ x, x ] [ y, y ] a b a b r = r( u, v) paramøteres egyenlettel adott fel letek, ahol (u, v) [ u, u ] [ v, v ] paramøtertartomæny a b a b paramøtervonalakkal t rtønı ÆbrÆzolÆs 8. LÆthat sæg szerinti ÆbrÆzolÆs F ggvønyfel leteknøl. a hæl szemeket balr l jobbra, hætulr l elıre rajzoljuk ki {zfxy.pas}. 3 Ymax Ymin getmaxx 3 `ltalæban A hæl szemeket a vet tøsi irænyra rendezz k (pærhuzamos vet tøsnøl) vagy a nøzıpontt l val tævolsæg szerint rendezz k (centrælis projekci næl). 45

9. Fel let interpolæci, approximæci 9. Bezier fel let {bezierfe?.pas} Adottak a b ij (i=,,n; j=,,m) kontrollpontok a tørben. n a( u) = a B ( u), i= i n i m m i i j j j= ahol a ( v) = b B ( v), gy a Bezier fel let egy (u, v) paramøterß pontjænak elıææl tæsa: n m n m m n m n b( u, v) = bi j B j ( v) B i ( u) = bi j B j ( v) B i ( u) i= j= i= j= ahol (u,v) [,] [,] 46

9. B-spline fel let 9.. `ltalænos B-spline fel let a( u) = a ( v ~ ) N ( u), i i k i l i i j j j ahol a ( ~ v) = b N ( ~ v), gy a B - spline fel let egy (u,v) paramøterß pontjænak elıææl tæsa: l k l k b( u, v) = bi j N j ( v) Ni ( u) bi j N j ( v) Ni ( u) i j = i j 9.. Harmadfokœ B-spline fel let {bspl3fe?.pas} Legyenek b - k kontrollpontok, ahol i =,..., 3; j =,..., 3. i j A harmadfok] B - spline fel let egy (u,v) paramøterß pontjænak elıææl tæsa: 3 b( u, v) = b X ( u) X ( v), i= j= i j ahol (u,v) [, ] [, ] 3 3 X( t) = ( t 6 ) 3 X( t) = ( t t 6 3 6 + 4 ) 3 X( t) = ( 3t + 3t + 3t + ) 6 3 X3( t) = t 6 i j Ha a b ij kontrollpontok (i=,,n; j=,,m) alakban vannak adva, ahol n>3 ;s m>3, akkor az (n+) X (m+) -es kontrollhæl ban az sszes 4x4 -es kontrollhæl szegmensre illeszteni kell egy harmadfokœ B-spline fel letet, Øs ezen fel letek uni ja lesz az (n+) X (m+) -es kontrollhæl ra illesztett fel let. 47

. S klapokkal hatærolt testek ÆbrÆzolÆsa. TestmodellezØs.. Dr tvæz modell {\Polieder\Ztnezop\nemlathato\ } test.txt V {csœcsok szæma} x y z x v- y v- z v- E {Ølek szæma} V s V f C {csœcs_index csœcs_index sz n} V se- V fe- C E- kocka.txt 8 8 8-8 -8 8-8 -8-8 -8 8-8 -8 8-8 8 8 8 8-8 8 8-8 -8 8 4 4 3 4 3 4 5 4 5 4 4 4 7 4 7 6 4 6 5 4 4 3 4 6 4 7 4 Const Vmax=5; Emax=5; Type rpoint3dtype=record x,y,z:real; Var edgetype=record VS,VE:integer; EC:word; Verticestype=array[..Vmax] of rpoint3dtype; Edgestype=array[..Emax] of edgetype; 48

vertices:verticestype; edges:edgestype; V,E:integer; procedure Hiba(msg:string); writeln( FutÆsi hiba:,msg); halt; procedure Beolvas(s:string); var af:text; i:integer; sz:integer; {$I-} assign(af,s);;reset(af); {$I+} if ioresult<> then hiba( Nem elørhet file +s); {csucsok beolvasasa} readln(af,v); for i:= to V- do readln(af,vertices[i].x,vertices[i].y,vertices[i].z); {elek beolvasasa} readln(af,e); for i:= to E- do readln(af,edges[i].vs,edges[i].ve,edges[i].ec);.. Fel letmodell {\Polieder\Ztnezop\lathato\ } test.txt V {csœcsok szæma} x y z x v- y v- z v- F {lapok szæma} elsı lapot alkot csœcsok indexei utols lapot alkot csœcsok indexei Const Vmax=5; kocka.txt 8 8 8-8 -8 8-8 -8-8 -8 8-8 -8 8-8 8 8 8 8-8 8 8-8 -8 8 6 3 7 6 5 4 7 5 6 3 4 5 7 4 3 7 6 7 49

Type Fmax=5; rpointdtype=record x,y:real; rpoint3dtype=record x,y,z:real; vertexpointertype=^vertexinfacelist; vertexinfacelist=record FV:integer; n:vertexpointertype; facetype=record normal:rpoint3dtype; head:vertexpointertype; Verticestype=array[..Vmax] of rpoint3dtype; Facestype=array[..Fmax] of facetype; Var vertices:verticestype; faces:facestype; V,F:integer; origox,origoy:integer; procedure Hiba(msg:string); writeln( FutÆsi hiba:,msg); halt; procedure Beolvas(s:string); var af:text; i,c,c,c3,c4:integer; sz:integer; p,q:vertexpointertype; {$I-} assign(af,s);;reset(af); {$I+} if ioresult<> then hiba( Nem elørhet file +s); {csucsok beolvasasa} readln(af,v); for i:= to V- do readln(af,vertices[i].x,vertices[i].y,vertices[i].z); {lapok beolvasasa} 5

readln(af,f); for i:= to F- do read(af,sz); new(faces[i].head);faces[i].head^.fv:=sz; q:=faces[i].head; while not eoln(af) do read(af,sz); new(p);p^.fv:=sz; q^.n:=p; q:=p; p^.n:=nil; {lapok kifele mutato normalvektorainak kiszamitasa} with faces[i] do lapnormalis(vertices[head^.fv],vertices[head^.n^.fv],vertices[he ad^.n^.n^.fv],normal); 5

. LÆthat sæg szerinti ÆbrÆzolÆs. HÆts lapok kiszßrøse HÆts lapok kiszßrøse a lapok kifelø mutat normælvektorai (n) Øs a centrumba mutat (c) vektor Æltal bezært sz g alapjæn: cos( n, c) Egy lap hæts lap, ha azaz. n x cx + ny cy + n z cz A konvex poliøderek læthat sæg szerinti megjelen tøsøhez elegendı a hæts lapokat eltævol tani {\Polieder\Ztnezop\lathato\brep3.pas}. Ez a technika hasznælhat a test laponkønt egysz nß ÆrnyalÆsÆra is {\Polieder\Ztnezop\lathato\shade.pas}.. Z Buffer algoritmus.3 SugÆrk vetøs (ray tracing) {POVRAY.DOC}.3. Algoritmus for minden scan-line-ra a køps kon do for minden pixelre a scan line-on do a centrumb l a pixelhez vezetı sugær meghatærozæsa; for minden megjelen tendı objektumjæra a tørrøsznek do if van metszøspont Øs k zelebb van, mint az elızı then feljegyezni a metszøspontot Øs az objektumot; a pixel szinøt beæll tani 5

.3. A metszøspontok meghatærozæsa. A vet tısugær meghatærozæsa: C( x, y, z ) a vet tøsi centrum, P( x, y, z ) egy pixel k zepe. x=x + t( x x ), y=y + t( y y ), z=z + t( z z ) G mb esetøben: x = x x, y = y y, z = z z x=x + t x, y=y + y, z=z + z ( x a) + ( y b) + ( z c) = r, behelyettes tve x, y, Øs z - t: [ ] ( x + y + z) t + t x( x a) + y( y b) + z( z c) + A g mb normælisa : Poligon esetøn: ( x a) + ( y b) + ( z c) r = ( ) P( x, y, z) - ben: ( x a) / r + ( y b) / r + ( z c) / r A poligon s kjænak egyenlete: Ax+By+Cz+D=. Behelyettes tøs utæn t-re ad dik: Ax +By +Cz +D t =, hacsak A x+b y+c z A x+b y+c z. Ekkor levet tj k a poligont a legnagyobb køpet elıæll t koordinætas kra, ahol a metszøspontra elvøgezz k a bentvan tesztet..3.3 HatØkonysÆgot n velı m dszerek: A metszøspontok kiszæm tæsænak optimalizælæsa A sugarak transzformælæsa z tengellyel pærhuzamos helyzetbe. HatÆrol objektumok bevezetøse (pl konvex poliøderek, pærhuzamos egyenespærok Æltal hatærolt konvex lapokkal) 53

Hierarhia TØrbeli szeparælæs 54