A grafika programozás alapjai
Kunné Dr. Tamás Judit�
Dr. Dudás László diái alapján
Vázlat
A grafika programozás módozatai
A C programozási nyelv használatával elérhető módozatok
Képernyőmemória
A képernyő koordináta rendszere�(graphics.h használata esetén)
Monitortípusok, meghajtókártyák, meghajtóprogramok, módok
A graphics.h fájl fontosabb függvényei
Grafikus rendszer vezérlése
A rajzolás így az initwindow() és a closegraph() között lehetséges
Rajzolás
Kifestés, kitöltés
Szövegkiírás
Képernyőrész, illetve ablakkezelés
Lapozás
Színkezelés
Hibakezelés
Állapotlekérdezés
Minden beállítható érték lekérdezhető
Mintaprogram 1
#include <stdio.h>
#include <graphics.h>
int main( ) /* a CodeBlocks C program főfüggvénye */
{
int i,R,MaxX,MaxY;
initwindow( 640 , 480 , " WinBGIm Demo " ); /* 1024 , 768 is mûködik */
setbkcolor(LIGHTGRAY); /* háttérszín elõválasztás: világosszürke*/
cleardevice(); /* háttér törlése háttérszínre */
setlinestyle(SOLID_LINE,0,THICK_WIDTH); /* vonalstílus beállítása */
MaxX= getmaxx(); MaxY= getmaxy(); /* ablakméret lekérdezése */
for (i=1; i<=10; i++) {
setcolor(i+5); /* aktuális vonalszín beállítása */
line(0,0,(MaxX / 10)*i, MaxY); /* szakaszrajzolás */
R= (MaxY-10) / (2*i); /* körsugár beállítása */
circle(MaxX-R, MaxY / 2, R); /* körrajzolás */
ellipse(MaxX / 2, MaxY / 8, 0, 360, MaxX / (4*i), MaxY / 8); /* ellipszis rajzolás */ }
while( !kbhit() ); /* várakozás billentyűlenyomásig */
closegraph( ); /* grafikus üzemmód/ablak bezárása */
return( 0 );
}
A CodeBlocks fejlesztőkörnyezetben futtatott program képe
Hogy oldjuk meg, hogy a háttérszínt ne vegye fel?
if(i+5 == getbkcolor()){
if(getbkcolor()==BLACK){
setcolor(WHITE);
}else{
setcolor(BLACK);}
}else{
setcolor(i+5); /* aktuális vonalszín beállítása */
}
Mintaprogram 2
int smile(){
int cx,cy;
initwindow( 640 , 480 , " Smile" );
cx = getmaxx()/2;
cy = getmaxy()/2;
setfillstyle(1,YELLOW);
fillellipse(cx-200,cy-40,80,80);
setcolor(BLACK);
setfillstyle(1,BLACK);
fillellipse(cx-230,cy-60,8,12);
fillellipse(cx-170,cy-60,8,12);
arc(cx-200,cy-30,200,340,30);
setcolor(CYAN);
setfillstyle(1,CYAN);
pieslice(cx,cy-40,0,180,50);
setfillstyle(1,BLUE);
sector(cx, cy-40, 180,360,50,80);
setcolor(LIGHTGREEN);
setfillstyle(SLASH_FILL,LIGHTGREEN);
bar(cx+120,cy-90,cx+260,cy+50);
setcolor(WHITE);
settextstyle(3,0,3);
outtextxy(cx-200,cy+100,"Sziasztok");
getch();
closegraph(CURRENT_WINDOW);
return 0;
}
Síkbeli transzformációk
Leképezés a Világ-koordinátarendszerről a Képernyő-koordinátarendszerre
Lx = getmaxx()/(x2-x1)
Ly = getmaxy()/(y2-y1)
A képernyő-koordináták:
XK = Lx*(x-x1)
YK = getmaxy()-Ly*(y-y1) = Ly*(y2-y)
Ponttranszformációk a Világ-koordinátarendszerben
Eltolás (Transzláció)
r1 = MT * r0
A transzformációk mátrixszal való megadásának előnye az egymást követő transzformációk egyesített kezelésének egyszerűsége.
Nagyítás, kicsinyítés (Zoom-olás) az origóra vonatkozóan
r1 = MZ * r0
Elforgatás az origó körül (Rotáció)
r1 = MR * r0
Példa�Egy háromszög elforgatása adott pont körül adott szöggel
Forgassuk el a C(7,9) pont körül 90 fokkal a (14,4),
(19,5) és (13,11) koordinátájú csúcsokkal adott
háromszöget!
A transzformáció mátrixa:
2. lépés: Áttranszformálás a 90 fokkal elforgatott K2 koordinátarendszerbe. (Elforgatás)
A transzformáció mátrixa:
3. lépés: Áttranszformálás a K2 koordináta-rendszerből a K3 koordinátarendszerbe. (Eltolás)
A transzformáció mátrixa:
vektor által kijelölt (5,15) pontba kerül.