1 / 52

Presentatie titel

Computer Graphics. Presentatie titel. Technische Informatica www.hogeschool-rotterdam.nl/cmi. Rotterdam, 00 januari 2007. Les 2. Les 2 gaat over de hoofdstukken: 3.1 Scan-conversie van een punt 3.2 Scan-conversie van een lijn 3.3 Scan-conversie van een cirkel

bella
Download Presentation

Presentatie titel

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computer Graphics Presentatie titel Technische Informatica www.hogeschool-rotterdam.nl/cmi Rotterdam, 00 januari 2007

  2. Les 2 • Les 2 gaat over de hoofdstukken: • 3.1 Scan-conversie van een punt • 3.2 Scan-conversie van een lijn • 3.3 Scan-conversie van een cirkel • 3.4 Scan-conversie van een ellips • 3.5 Scan-conversie van een bogen en sectoren • 3.6 Scan-conversie van een rechhoek • 3.7 Opvullen van een gebied • 3.8 Scan-conversie van een karakter

  3. Inleiding • Veel figuren bestaan uit primitieven (punt,lijn,..enz) • Deze zijn gedefinieerd in de continue ruimte i.p.v. pixels in de discrete beeld ruimte • Bijv. een lijn heeft vergelijking door 2 eindpunten • Het grafische systeem moet die vergelijking converteren naar de beeldruimte. Dit heet scan-conversie of rastering • Dit hoofdstuk gaat over wiskundige en algoritmische apecten van scan-conversie • Primitieven zoals punt,lijn,cirkel,ellips,..enz.

  4. Scan-conversie: punt • Eenwiskundig punt (float x,float y) moetgeconverteerdwordennaareen pixel op lokatie (x’,y’) • Ditkan op 2 manieren; • Door (x’,y’) gelijktemakenaanhet integer gedeelte van (x,y) (hetgehelegetal) • Ditkan met de Floor functie • x’= Floor(x) , y’=Floor(y) • Dezelevert de grootstewaardeaf die ≤ argument

  5. Scan-conversie: punt • Allepunten die voldoenaan: • x’≤ x<x’+1 en y’≤y<y’+1 wordenafgebeeld op pixel (x’,y’) • Hetplaats de oorsprong in de linkerhoek van het pixel (zie fig 3-1a)

  6. Scan-conversie: punt • Voorbeeld: • P1(1.7,0.8)  pixel (1,0) • P2(2.2,1.3)  pixel (2,1) • P2(2.8,1.9)  pixel (2,1) • De Floor functiekanookandersingevuldworden: • x’= Floor(x+0,5) , y’=Floor(y+0,5) • Allepunten die voldoenaan: • x’-0,5 ≤ x< x’+0,5 en y’+0,5 ≤y<y’+0,5 wordenafgebeeld op pixel (x’,y’)

  7. Scan-conversie: punt • Hetplaats de oorsprong in hetcentrum van het pixel (zie fig 3-1b) • Voorbeeld: • P1(1.7,0.8)  pixel (2,1) • P2(2.2,1.3)  pixel (2,1) • P2(2.8,1.9)  pixel (3,2) • De 2e benaderingwordtgebruikt • Anderevoorbeelden van afrondfuncties: • Floor(4.8)  4 Floor(4.1)  4 • Ceil(4.8)  5 Ceil(4.1)  5 • Round(4.8)  5 Round(4.1)  4

  8. Scan-conversie: lijn • Eenlijnwordtbepaald door 2 eindpunten P1 en P2 ( zie fig 3-2) • De vergelijking van de lijn is y=mx+b • m=helling; b=snijpunt y-as • Men kiest m ≥ 1 ( rest wordtafgeleid) • m=∞, horizontaal,vertikaalworden apart berekend

  9. Scan-conversie: lijn • Directe berekening: • P1en P2 converteren naar pixel P1’(x1’,y1’) en P2’(x2’,y2’) • De helling wordt dan: • Het snijpunt y-as b = y1’ - m.x1’ • Het nadeel hiervan is dat er floating point berekeningen zijn

  10. Scan-conversie: lijn • DDA algoritme: (Digital Differential Algoritme) • Dit is een incrementelescan-conversie methode • Na iedere stap i wordt opnieuw xi+1 en yi+1 berekend • Als (xi,yi) berekend is als een punt op de lijn , dan moet het volgende punt (xi+1,yi+1) voldoen aan ∆x/∆y=m • Hierbij is ∆y= yi+1-yi en ∆x=xi+1-xi • Nu is yi+1=yi + ∆x.m

  11. Scan-conversie: lijn • Als |m| ≤ 1 starten we met x=x’en y=y’en maken ∆x=1 • De y-coordinaat wordt dan yi+1=yi+m • Ditgaat door tot y=y2’ • Als |m| > 1 starten we met x=x’en y=y’en maken ∆y = 1 • De x-coordinaat wordt dan xi+1,= xi+1/m • Ditgaat door tot x=x2’ • Allepuntenzijndan pixels • DDA is snelleromdatergeen floating point vermenigvuldigingenzijn • Weleen floating point optelling (1/m eenmaligberekend)

  12. Scan-conversie: lijn • Bresenhamalgoritme: • Dit is eenefficienteincrementelemethodeom scan-conversie van eenlijnuittevoeren • Het gebruiktalleen integer optelling ,aftrekken en vermenigvuldigen met 2 (schuif-operatie) • In fig 3-3 is eenlijngetekendvoor 0<m<1 • Om eenvolgend punt tevindenmoetgekozenwordenvoor S of T (naaropzij of naarbeneden) • Zonderafleidingwordt het resultaat:

  13. Scan-conversie: lijn

  14. Scan-conversie: lijn • int x=x’, y=y’; • int dx=x2’- x1’ , dy = y2’-y1’ ; • int dT=2(dy-dx) , dS= 2dy; • int d=2dy-dx; • setPixel(x,y); • while( x < x2’ ) • { x++; • if (d <0) d=d +dS; • else { y++; d= d+dT;} • } • setPixel(x,y); • }

  15. Scan-conversie: cirkel • Erzijnverschillendemanierenomeencirkelteberekenen • Eencirkel is symmetrisch • Door 1 punt teberekenkunnen 8 punteningevuldworden ( zie fig 3-4) • De puntenzijn: • P1=(x,y) P5=(-x,-y) • P2=(y,x) P6=(-y,-x) • P3=(-y,x) P7=(y,-x) • P4=(-x,y) P8=(x,-y)

  16. Scan-conversie: cirkel

  17. Scan-conversie: cirkel • Er zijn 2 definities voor een cirkel: • 2e orde polynoom(2egraads vergelijking) • y2=r2 –x2 zie fig. 3-5 • Hierin is: • x=x-coordinaat • y=y-coordinaat • r= straal • Inefficient algoritme vanwege de vele berekeningen (wortel, kwadraat,enz)

  18. Scan-conversie: cirkel • Goniometrischefunctie(zie fig 3-6) • x=rcosθ y=rsinθ • x= x-coordinaat • y= y-coordinaat • R= cirkelstraal • Θ = hoek • Bij deze methode gaat θ van 0 tot π/4 en x en y worden berekend • Dit kost nog meer rekentijd om sin en cos te berekenen dan de 1e methode

  19. Scan-conversie: cirkel • Bresenhamalgoritme: • Dit is eenefficienteincrementelemethodeom scan-conversie van eencirkeluittevoeren • Hetgebruiktalleen integer optelling ,aftrekken en vermenigvuldigen met 2 (schuif-operatie) • Alleen de berekening van 900-450 is nodig (zie fig 3-7 • De bestebenadering van de echtecirkelzijnpunten in het raster ,die erdichtbijzijn door: • Beweeg in de x-richting 1 stap • Beweeg in de x-richting 1 stap en de negatieve y-as 1 stap

  20. Scan-conversie: cirkel • Eenkeuze van 1 van de 2 dienttewordengemaakt • Neemaandat (xi,yi) de coordinatenzijn van hetlaatstgeconverteerde punt nastapi (zie fig 3-8)

  21. Scan-conversie: cirkel

  22. Scan-conversie: cirkel • Dan is pixel P=(xi,yi) • Dan is pixel T=(xi+1,yi) • Dan is pixel S=(xi+1,yi-1) • Stel D(T)= (xi+1)2 + yi2 – r2 • Stel D(S)= (xi+1)2 + (yi-1)2 – r2 • D geeft de relatieveafstand van eenpixelcentrum tot de echtecirkel • D(T) is altijdpositief (buiten de cirkel) • D(S) is altijdnegatief (binnen de cirkel)

  23. Scan-conversie: cirkel • Eenbeslississingsvariabeledi is alsvolgtgedefinieerd: • di = D(T) + D(S)  • di = 2(xi+1)2 +yi2 +(yi-1)2 – 2r2 • Alsdi <0 dan is |D(T)| < |D(S)| en wordt pixel T gekozen • Alsdi ≥0 dan is |D(T)| ≥ |D(S)| en wordt pixel S gekozen • Nu de beslissingsvariable di+1bepalenvoor de volgendestap:

  24. Scan-conversie: cirkel • di+1 = 2(xi+1+1)2 +yi+12 +(yi+1-1)2 - 2r2 • Nu is: • di+1-di = 2(xi+1+1)2 +yi+12 +(yi+1-1)2 - 2r2 -2(xi+1)2 -yi2 -(yi-1)2 + 2r2 • = 2(xi+1+1)2 +yi+12 +(yi+1-1)2 -2(xi+1)2 -yi2 -(yi-1)2 • Daar xi+1= xi +1  • di+1=di+2(xi+2)2 +yi+12+(yi+1-1)2-2(xi+1)2-yi2-(yi-1)2

  25. Scan-conversie: cirkel • di+1=di+ 2xi2 + 8xi+ 8+ yi+12+ yi+12 - 2 yi+1 +1 - 2xi2 - 4xi -2 - yi2 - yi2 + 2yi - 1  • di+1=di+ 4xi+ 2( yi+12- yi2 ) -2( yi+1 - yi) +6 • Als T hetgekozen pixel is(di<0) dan is yi+1=yi di+1=di+ 4xi+ 6 • Als S hetgekozen pixel is(di≥0) dan is yi+1=yi-1  di+1=di+ 4xi+ 2( yi-1)2- 2yi2 -2( yi-1 - yi) +6

  26. Scan-conversie: cirkel di+1=di+ 4xi+ 2yi2- 4yi+2- 2yi2 +2+6 di+1=di+ 4xi - 4yi+10  di+1=di+ 4(xi - yi)+10 • Conclusie: di+1=di+ 4xi+ 6 alsdi<0 di+1=di+ 4(xi - yi)+10 als di≥0 • Alsstartpuntkiezen we (xi, yi)=(0,r) • Gegeven was di = 2(xi+1)2 +yi2 +(yi-1)2 – 2r2 •  d1=2(0+1)2 + r2 +(r-1) 2 -2r2

  27. Scan-conversie: cirkel  d1=2 + r2 +r 2 -2r +1-2r2 = 2 - 2r +1 = 3-2r • Voor 900 < θ <450 geldtdan: int x =0, y=r, d=3-2r; while ( x <= y) { setPixel (x,y) if (d <0) d= d+4x+ 6; else { d=d+4(x-y) +10; y--; } x++; } • Er is alleenschuiven (vermenigvuldigen met 4) en optellen

  28. Scan-conversie: ellips • De ellipsheeftevenals de cirkelsymmetrie (4 keeri.p.v. 8 keer) • Er zijn 2 definities voor een ellips: • 2e orde polynoom(2egraads vergelijking) (zie fig. 3-9) • Hierin is: • (h,k)= centrum van de ellips • a= lengte van de lange as • b=lengte van korte as

  29. Scan-conversie: ellips • De waarde van x wordtverhoogd van h tot a • Vooriederestapmoet y berekendworden met:

  30. Scan-conversie: cirkel • Dezemethode is zeer inefficient. • De kwadraten, floating point, wortels ,enz • Goniometrischefunctie(zie fig 3-10)

  31. Scan-conversie: ellips • De vergelijkingenzijn: • x=a cos(θ)+h en y=bsin(θ)+k • Met (x,y) de coordinaten • a=lengte van de lange as • b=lengtekorte as • (h,k)= middelpuntellips • De waarde van θ loopt van 0 tot π/2 radialen • De overige posities met symmetrie bepalen • De methode is niet efficient • Met veel geheugen en lookup tabellen van sinus en cosinus te versnellen

  32. Scan-conversie: ellips • Midpoint algorime: • Dit is eenefficienteincrementelemethodeom scan-conversie van eenellipsuittevoeren • Hetgebruiktalleen integer optelling ,aftrekken en vermenigvuldigen met 2 (schuif-operatie)

  33. Scan-conversie: boog • Eenboog (fig 3-13a) kanwordengegenereerd met polynomen of goniometrischefuncties

  34. Scan-conversie: boog • Als de goniometrischefunctiegebruiktwordt: • De startwaarde is θ1 en de eindwaardeθ2 (ziefig 3-13 a en b) • De rest van de stappenzijnidentiekalsbijeencirkel • Als de polynoommethodegebruiktwordtdanvarieert de waarde van x1 en x2 (zie fig 3-14) • De waarde van y wordtberekenduit • Bresenhamwordtnietgebruiktomdat de eindpuntenmoeilijkteberekenenzijn

  35. Scan-conversie: boog

  36. Scan-conversie: sector • Een sector wordtgeconverteerd door scan-conversievooreenbooguittevoeren en • Daarna de scan-conversievoor de 2 lijnenvanuithetcentrum • Stelsectorcentrum (h,k) • Eerst scan-conversie van eenboog van θ1 tot θ2 • Daarnaeenlijn van (h,k) tot (rcos(θ1)+h,rsin(θ1)+k ) • Daarnaeenlijn van (h,k) tot (rcos(θ2)+h,rsin(θ2)+k )

  37. Scan-conversie: rechthoek • Eenrechthoekwaarvan de assenevenwijdigzijnaan de coordinaatassen is bepaaldalser 2 hoekpuntenbekendzijn (zie fig 3-16a) • De overgeblevenhoekpuntenkunnenwordenafgeleid (zie fig 3-16b)

  38. Scan-conversie: rechthoek • Als de hoekpuntenbekendzijn, worden de coordinatendoorgegevenaan de lijnroutine en scan-conversie van de rechthoekvindtplaats • De volgendelijnenwordengetekend: • De lijn (x1,y1) naar (x1,y2) • De lijn (x1,y2) naar (x2,y2) • De lijn (x2,y2) naar (x2,y1) • De lijn (x2,y1) naar (x1,y1)

  39. Opvullen van een gebied • Hetopvullen van eengebied is hetkleuren van eengedeelte van eengebied • Gebiedenkunnengedefinieerdworden op pixel of meetkundigniveau • Op pixel niveaubeschrijven we hetgebied in termen van de grens pixels (zie fig 3-17a) of de totale pixels die hetgebiedomvat (zie fig 3-17b) • Voor (a) wordt boundary-fill algoritmegebruikt • Voor (b) wordt flood-fill algoritmegebruikt

  40. Opvullen van een gebied • Op meetkundigniveau is eengebiedgedefinieerd met lijnen en krommen (bijv. eenpolygoon)

  41. Opvullen van een gebied • Boundary-fill • Dit is eenrecursiefalgoritmedatbegint met eenstartpixelbinnenhetgebied ( seed) • Hetalgoritmekijkt of dit pixel a) eengrenspixel is of b) dathet al gevuld is • Alshetantwoord nee is wordthet pixel gevuld en roeptzichzelfweeraan en eenbuurpixelwordtgebruiktalsnieuw seed • Alshetantwoordja is , wordtteruggekeerdnaarzijnoorspronkelijkeoproep

  42. Opvullen van een gebied • Flood-fill • Ditalgoritmebegint met eenstartpixel (seed) binnenhetgebied. Hetkijkt of het pixel de orginelekleurheeft van hetgebied. • Alshetantwoordja is , wordthet pixel gevuld met eennieuwekleur en gebruikteenbuurpixelalsnieuw seed wordtopnieuwopgeroepen (recursief) • Alshetantwoord nee is , wordtteruggekeerdnaarzijnoorspronkelijkeoproep • Dezemethode is bruikbaaralsergeen uniform gekleurdegrens is

  43. Scan-lijn algoritme • In plaats van op pixel niveaukanookeenpolygoonopgevuldworden (gebieden die meetkundiggedefinieerdzijn met coordinaten) • Dit is eensnelleremethodedan boundary fill • We hebbeneengebied met hoekpunten V1,V2, V3,.. , die verbondenzijn met lijnen E1,E2, E3, … , (zie fig 3-19) • We nemenaandatiederhoekpunt al eenconversieheeftondergaannaar integer coordinaten (xi,yi)

  44. Scan-lijn algoritme

  45. Scan-lijn algoritme • Hetalgoritmebegint met de eerstescanlijn van de polygoon en vervolgt tot de laatstescanlijn • Vooriederescanlijnberekendhethetsnijpunt met de polygoon • Bijv: scanlijn y snijdt de lijnen E1,E7,E6 en E4 in de puntena,b,c,d • De snijpuntenwordengesorteerdnaar de x-coordinaat en gegroepeerdalsparen, bijv (a,b) en (c,d) • Daarnawordteenlijngetekend van het 1e punt naarhet 2e punt van elk paar

  46. Scan-lijn algoritme • Horizontalelijnenwordengenegeerd ,want die wordenautomatischgevuld met de juistekleurtijdens de scan conversie • Bijv: lijn E5 wordtgetekendals de scan lijngeconverteerdwordt

  47. Scan-conversie: karakter • Karakters , zoals letters en cijferszijn de bouwblokken van tekst • Zewordengepresenteerd in verschillendestijlen en groottes. De ontwerpstijl van eenverzamelingkaraktersheetlettertype of font • Gewone fonts zijn Arial, Century, Courrier, enz • Zevarieren in verschijning: zwart, schuin, onderstreept, enz • Karaktergroottewordtgemeten in inches en pica’s (punten)

  48. Scan-conversie: karakter • 2 basis benaderingen: • Raster of bitmap font. • Iederkarakter is eenverzameling pixels in eenbilevel raster patroon (bitmap) zie fig 3-20 • Dit is eenvoudig , iederkarakter is al geconverteerd en kanzoingevoegdworden op eenlocatie in de bitmap.

  49. Scan-conversie: karakter • Erzijnaparte bitmaps nodigvoorzwart, schuin, enz. • Bovendienzijnschuine bitmaps overlappend in eenbeeld ( zie fig 3-21) • Verder is de grootte van een bitmap afhankelijk van de resolutie.

More Related