Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.

Hasonló előadás


Az előadások a következő témára: "Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév."— Előadás másolata:

1 Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév

2 Információk Gyakorlati diák: http://people.inf.elte.hu/valasek/bevgraf_esti/ http://people.inf.elte.hu/valasek/bevgraf_esti/

3 Emlékeztető Röviden megnéztük az osztályokat – erre még később visszatérünk Alacsony szintű utasításokkal megnéztük milyen magasabb szintű parancsokat implementálni Esetünkben pontkirajzolással szakaszkirajzolást Most a múlt órai algoritmust finomítjuk

4 Miből indulunk ki? A múlt óraihoz hasonló vonalhúzó kódból: http://people.inf.elte.hu/valasek/bevgraf_e sti/03/VonalhuzoAlap.zip http://people.inf.elte.hu/valasek/bevgraf_e sti/03/VonalhuzoAlap.zip Ezt a Dokumentumok/Processing-be kell kitömöríteni

5 VonalhuzoAlap int dragStartX, dragStartY; int dragEndX, dragEndY; void setup() { size(400, 400); } void draw() { background(220); line(dragStartX, dragStartY, dragEndX, dragEndY); }

6 VonalhuzoAlap void mousePressed() { if (mouseButton == LEFT) { dragStartX = dragEndX = mouseX; dragStartY = dragEndY = mouseY; } void mouseDragged() { if (mouseButton == LEFT) { dragEndX = mouseX; dragEndY = mouseY; }

7 Általánosított Bresenham function BresGen(x0, y0, x1, y1) boolean steep := abs(y1 - y0)>abs(x1 - x0) if steep then swap(x0, y0) swap(x1, y1) if x0 > x1 then swap(x0, x1) swap(y0, y1) int deltax := x1 - x0 int deltay := abs(y1 - y0) float error := 0 float deltaerr := deltay / deltax

8 Általánosított Bresenham int ystep := 1 if y0 > y1 then ystep := -1 int y := y0 for x from x0 to x1 if steep then point(y,x) else point(x,y) error := error + deltaerr if error >= 0.5 then y := y + ystep error := error - 1.0

9 Feladat 1 Készítsük el az általánosított Bresenham eljárást Processing-ben!

10 Probléma Lebegőpontos számokkal történő műveletek helyett jó lenne egész számokon dolgozni Az összes nem egész számunkat szorozzuk be deltax-szel! Probléma: error ≥ 0.5 Fordítsuk meg az error jelentését és indítsuk deltax/2-ről!

11 Bresenham optimalizált function BresOpt(x0, y0, x1, y1) boolean steep := abs(y1-y0) > abs(x1-x0) if steep then swap(x0, y0) swap(x1, y1) if x0 > x1 then swap(x0, x1) swap(y0, y1) int deltax := x1 - x0 int deltay := abs(y1 - y0)

12 Bresenham optimalizált int error := deltax / 2 int ystep := 1 int y := y0 if y0 > y1 then ystep := -1 for x from x0 to x1 if steep then plot(y,x) else plot(x,y) error := error – deltay if error < 0 then y := y + ystep error := error + deltax

13 Házi Feladat Írjuk meg a Bresenham optimalizált formáját!

14 Bresenham Az eredeti 1962-es kód: http://www.bitsavers.org/1401/progs/brese nham/bresenham.s http://www.bitsavers.org/1401/progs/brese nham/bresenham.s Nagyon hatékony

15 Adatszerkezetek A Processing támogatja alapból a következő tároló típusokat: –ArrayList –HashMap ArrayList használata pl.: http://java.sun.com/j2se/1.4.2/docs/api/jav a/util/ArrayList.html http://java.sun.com/j2se/1.4.2/docs/api/jav a/util/ArrayList.html

16 ArrayList példa ArrayList al = new ArrayList(); al.add(new PVector(3, 2)); al.add(new PVector(35, 22)); for (int i=0; i<al.size(); ++i) { PVector p = (PVector)al.get(i); print(p); }

17 Feladat 2 Írjuk programot, ami négy pont kijelölése után összeköti őket egy négyszöggé A bal egérgombbal adjunk hozzá új pontot a pontlistához Négynél ne legyen több pont egyszerre A négyszögünk csúcsait kis, 10 pixel átmérőjű körök jelezzék (strokeWeight + point(x,y)) 1 vastagságú szakaszok legyenek köztük

18 Feladat 3 Az előző négyszögrajzoló programot bővítsük ki az alakzatkitöltés lehetőségével:

19 Kitöltés void fld(x, y, c, bg) if pixel[x,y] = bg AND x > 0 AND y > 0 AND x < width AND y < height then pixel[x,y] := c flt(x+1, y, c, bg) flt(x-1, y, c, bg) flt(x, y+1, c, bg) flt(x, y-1, c, bg)

20 Probléma Mi lehet az oka? Alakzatkitöltésre más, hatékonyabb algoritmusok vannak

21 Szövegkirajzolás PFont: –A Processing karakterkészlet osztálya –Használat: PFont font = loadFont(“fnt.vlw"); textFont(PFont): –Az aktuális kirajzolási karakterkészletet a paraméterben kapottra módosítja text(str, x, y[, w, h, z]) textSize(int)

22 Példa void setup() { size(400, 400); PFont font = loadFont("fnt.vlw"); textFont(font); } void draw() { text("Helló", 15, 30); } http://people.inf.elte.hu/valasek/bevgraf_esti/03/fnt.vlw

23 Feladat 4 Az előző programban a négyszögek csúcspontjainak rajzoljuk ki a csúcspontok mellé

24 Fájl output PrintWriter: –Fájlba kiírásra –Használat: StreamWriter w = createWriter(“file.txt”); –Eljárások: print() println() flush() close()

25 Feladat 5 A létrejövő négyszögek koordinátáit írjuk ki egy fájlba (negyszogek.txt)

26 Fájl input String[] loadStrings( ) : –Betölti a paraméterben kapott fájlt soronként, visszaadja a beolvasás eredményét –Használat: String lines[] = loadStrings("szoveg.txt");

27 Szövegek feldolgozása String[] split(str, delim): –String gy = "alma, korte”; String[] l = split(gy, ','); String[] splitTokens(str, delims): –String gy = "alma, korte; eper”; String[] l = splitTokens(gy,“,;”);

28 String osztály Eljárások Java-ból ami ismerős: –substring(int fi, int li); –trim() –… Számmá alakítás: –parseInt(s); –parseFloat(s);

29 Feladat 6 Az „l” billentyű lenyomásával töltődjön be a fájlból az összes elmentett négyszögkoordináta és rajzoljuk ki őket


Letölteni ppt "Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév."

Hasonló előadás


Google Hirdetések