Tải bản đầy đủ (.pdf) (14 trang)

Tài liệu đồ hoạ máy tính hướng dẫn sử dụng thư viện đồ họa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (191.19 KB, 14 trang )

Sö dông th­ viÖn ®å häa cña C/C++
H

NG D N S

D NG TH

VI N

H A TRONG C/C++

I. M t s l u ý chung:
Yêu c u t i thi u ph i có t p tin EGAVGA.BGI (Thông th
tr
h a n m trong th m c BGI).
Không nên dùng các hàm liên quan n màn hình trong ch
printf, cout, scanf, cin, ... trong khi dùng ch
h a.

ng các t p tin h
v n b n nh

Khi c n tham kh o cú pháp, cách s d ng c a b t k m t hàm
h a nào, ta
a con tr v tên hàm trong ch ng trình sau ó nh t h p phím CTRL+F1
khi ó máy s hi n c u trúc c a hàm c n tham kh o.
Mu n tham kh o danh sách toàn b hàm c a th vi n
phím CTRL+F1 ngay t i dòng ch graphics.h

II. Các hàm kh i t o và óng ch


h a

1. void initgraph(int &gdriver,int

&gmode,String path);

Hàm này có tác d ng kh i t o ch
h a trong C/C++
Trong ó:
gmode : Không c n ph i kh i t o giá tr ban u
path
:
ng d n t i th m c ch a các t p tin h tr
gdriver: Là các giá tr t 0 n 10
H ng tr
DETECT
CGA
MCGA
EGA
EGA64
EGAMONO
IBM8514
HERCMONO
ATT400
VGA
PC3270

Giá tr
0 (Ng m
1

2
3
4
5
6
7
8
9
10

h a, ta nh n t h p

h a

nh máy t tìm ph n c ng thích h p)

2. int graphresult():

Tr v mã l i c a thao tác kh i t o
h a ( sau khi s d ng hàm initgraph)
- N u kh i t o thành công thì tr v giá tr là 0 (ho c grOk).
- N u không thành công thì tr v giá tr khác 0
3. void closegraph():

óng ch

TrÇn B¸ ¸nh

h a, tr v ch


v n b n bình th

ng.

1


Sö dông th­ viÖn ®å häa cña C/C++
Ví d 1: Vi t ch
màn hình.
#include
#include
#include
#include
#include

ng trình xây d ng hàm kh i t o

h a và v m t

<graphics.h> //th vi n ch a các hàm
<stdlib.h>
<iostream.h>
<stdio.h>
<conio.h>

ng tròn ra

h a


int main(void)
{
/* Kh i t o các gái tr ban u */
int gdriver = DETECT, gmode, errorcode;

h a */
/* Kh i t o ch
initgraph(&gdriver, &gmode, "c:\\bc5\\BGI");
/* L y k t qu c a thao tác kh i t o */
errorcode = graphresult();
if (errorcode != grOk) /* Thao tác kh i t o g p l i */
{
cout<<"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phím b t k
exit(1);
// Thoát kh i ch ng trình
}
/*

Thao tác các l nh
h a t i v trí này */
ng tròn */
/* V m t
circle(200, 250,200); //v
ng tròn có t a
tâm là (200,250)và bán

kính r= 200
getch();

closegraph();
return 0;

//d ng l i
xem
// óng ch
h a
//Thoát kh i hàm main()

}

III. H th ng t a
M t i m nh khi hi n th trên màn hình u
- T a c a i m ó (t a
c xác
- Màu s c c a i m ó

c xác inh qua hai thu c tính:
nh c p s nguyên (x,y))

1. int getx()
int gety()

Các hàm trên tr v t a

TrÇn B¸ ¸nh

x, y c a con tr

2



Sử dụng thư viện đồ họa của C/C++
2. int getmaxx()

Tr v chi u r ng t i a c a mn hỡnh (tớnh b ng s pixel- i m nh)
3. int getmaxy()

Tr v chi u cao t i a c a mn hỡnh (tớnh b ng s pixel- i m nh)
getmaxx()

(0,0)

getmaxy()
Hỡnh 1: Mụ ph ng t a

mn hỡnh

4. void cleardevice()

Xúa ton b mn hỡnh
h a b ng mu n n v a con tr v v trớ (0,0) c a mn hỡnh
Vớ d 2: Vi t ch ng trỡnh v m t
ng trũn cú tõm (150,200) v bỏn kớnh l 100.
sau ú xúa hỡnh ny v v l i
ng trũn khỏc cú tõm l chớnh gi a mn hỡnh v cú
bỏn kớnh l n a chi u cao mn hỡnh.
#include <graphics.h> //th vi n ch a cỏc hm
h a
#include

#include
#include
#include

<iostream.h>
<stdlib.h>
<stdio.h>
<conio.h>

int main(void)
{
/* Kh i t o cỏc gỏi tr ban u */
int gdriver = DETECT, gmode, errorcode;
/* Kh i t o ch
h a */
initgraph(&gdriver, &gmode, "C:\\bc5\\BGI");
/* L y k t qu c a thao tỏc kh i t o */
errorcode = graphresult();
if (errorcode != grOk) /* Thao tỏc kh i t o g p l i */
{
cout<<"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phớm b t k
exit(1);
// Thoỏt kh i ch ng trỡnh
}

Trần Bá ánh

3



Sö dông th­ viÖn ®å häa cña C/C++
/* V m t
ng tròn có t a
tâm là (200,250) và bán kính r= 200*/
circle(150, 200,100);
getch();
//d ng l i
xem
cleardevice(); //Xóa màn hình tr c ó
getch();
// Ch
n 1 phím b t k
/* L y t a chính gi a c a màn hình */
int maxx,maxy,x,y,r;
//L y chi u r ng l n nh t c a màn hình
maxx = getmaxx();
maxy = getmaxy();
//L y chi u cao l n nh t c a màn hình
x = maxx/2;
//L y i m chính gi a màn hình theo x
y = maxy/2;
//L y i m chính gi a màn hình theo y
r = y;
//bán kính
ng tròn
/*V

ng tròn m i có t a


chính gi a màn hình và bán r */

circle(x,y,r);
getch();

h a
// óng ch
//Thoát kh i hàm main()

closegraph();
return 0;
}

IV. V

i m,

ng, vùng:

1. void putpixel(x, y, color)

Hi n th ra màn hình m t i m nh có màu s c là color, t i t a
Trong ó:
x,y: là các s nguyên không âm
color: có giá tr t 0 n 15
B ng giá tr c a color nh sau:
Màu
giá tr
BLACK

BLUE
GREEN
CYAN
RED
MAGENTA
BROWN
LIGHTGRAY
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN

TrÇn B¸ ¸nh

(x,y)

0
1
2
3
4
5
6
7
8
9
10
11

4



Sö dông th­ viÖn ®å häa cña C/C++
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE

12
13
14
15

Ví d : V m t i m nh có màu
ra màn hình t i t a
putpixel(20, 15, RED);
Ho c:
putpixel(20, 15, 4);

(20,15)

2. int getpixel(x,y)

Tr v màu c a i m nh t i v trí có t a
là (x,y)
ví d 3: Vi t ch ng trình v
th c a hàm s b t k
#include
#include
#include

#include
#include
#include

<dos.h>
<math.h>
<conio.h>
<stdio.h>
<stdlib.h>
<graphics.h>

//T l phóng to
#define TL 50
void main()
{
int i;
int gr_drive = 0, gr_mode; //Kh i t o ch
h a
initgraph(&gr_drive, &gr_mode, "C:\\BC5\\BGI");
setcolor(7); //V h tr c t a
line(0,getmaxy()/2,getmaxx(),getmaxy()/2);
line(getmaxx()/2,0,getmaxx()/2,getmaxy());
outtextxy(325,230,"0");
for(int i=320%TL;i<640;i+=TL)
circle(i,239,1);
for(i=240%TL;i<480;i+=TL)
circle(319,i,1);
setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);
for(float x=-255;x<255;x+=0.001) //V
{

//************************
float y=x*x*x-2*x+1; //Hàm s c n v

th Hàm s

//************************
int X=TL*x,Y=-TL*(y);
putpixel(X,Y,2);

TrÇn B¸ ¸nh

5


Sö dông th­ viÖn ®å häa cña C/C++
}
getch();
closegraph();

// óng ch

h a

}
3. void moveto(x, y)

Di chuy n v trí con tr t i i m có t a

(x,y)


4. void line(x1, y1, x2,y2)

V

ng th ng có t a

i m

u là (x1,y1) và t a

i m cu i là (x2,y2)

5. void rectangle(x1,y1,x2,y2)

V hình ch nh t có t a
(x2,y2)

góc trên bên trái là (x1,y1) và t a

góc d

i bên ph i là

6. void circle(x, y, r)

V

ng tròn có t a

tâm là (x,y) và bán kính là r


ví d 4:
1. V
ng th ng có t a
i m u là (30,30) và t a
i m cu i là (150,200)
2. V hình ch nh t có t a
góc trên bên trái là (30,30) và góc d i bên ph i là
(150,200)
3. V
ng tròn có t a tâm là (90,121) và có bán kính là 90
line(30,30);
rectangle(30,30,150,200);
circle(90,121,90);
7. void

drawpoly(n, poly);

V m t a giác có s
nh là n, t a
các nh ch a trong m ng poly.
Chú ý: T a c a i m u và i m cu i ph i trùng nhau
Ví d 6: V

a giác có 4

nh và t a

các


nh l n l

t là:

(1,2), (9,10),(50,30),(1,1)
int poly[8];
poly[0]= 1;
poly[1]= 2;
poly[2]= 9;
poly[3]= 10;
poly[4]= 50;
poly[5]= 30;
poly[6]= poly[0];
poly[8]= poly[1];
drawpoly(4,poly);

TrÇn B¸ ¸nh

6


Sö dông th­ viÖn ®å häa cña C/C++
8. void

ellipse(x, y, loaibo, Do, BtrucLonx, Btrucnhoy)

V
ng elip t a
tâm là (x,y), có bán tr c l n là BtrucLonx, bán tr c nh là
Btrucnhoy. Vi c v Elíp ph thu c vào giá tr c a bi n Do.

- N u Do = 90 thì ch v cung ph n t th I c a Elip
- N u Do = 180 thì ch v cung ph n t th I và II c a Elíp
- N u Do = 360 thì v toàn b Elíp
Bi n loaibo có ch c n ng ng c l i hòan toàn v i bi n Do (xóa)
t c là:
- N u loaibo = 0 cho hi n th h t ph n v Elíp (không xóa)
c hi n th (xóa i
- N u loaibo = 90 thì cung ph n t th I c a Elip không
cung ph n t th I)
c hi n th .
- N u loaibo = 180 thì cung ph n t th I và II không
Chú ý: N u giá tr c a BtrucLonx = Btrucnhoy thì tr thành v
ng tròn có bán
kính là BtrucLonx
Ví d 7: V hình Elip có t a
tâm là (150,140), bán tr c l n là 100, bán tr c nh là
60
ellipse(150, 140, 0, 360, 100, 60);
9. void setcolor(color)

t màu v cho vi c v các
ng, hình, ...
color là màu c n
t
10. int

getcolor()

Tr v màu v hi n hành
11.void setbkcolor(color)


t màu n n cho màn hình

h a, color là màu c n

t

12. int getbkcolor()

Tr v màu n n c a màn hình

h a

Ví d 8: Vi t ch ng trình th c hi n các công vi c sau:
- t n n màn hình là màu xanh da tr i
-V
ng tròn có tâm là (200,220) bán kính 90 và có màu là màu tr ng
- V hình ch nh t có t a
góc trên bên trái là (10,20) và t a
c a góc d i bên
ph i là (100, 110) và có màu là màu vàng
V hình Elip có t a
tâm là (150,140), bán tr c l n là 100, bán tr c nh là 60 và có
màu là màu
#include
#include
#include
#include
#include


<graphics.h> //th vi n ch a các hàm
<stdlib.h>
<stdio.h>
<conio.h>
<iostream.h>

TrÇn B¸ ¸nh

h a

7


Sö dông th­ viÖn ®å häa cña C/C++
int main(void)
{
/* Kh i t o các gái tr ban u */
int gdriver = DETECT, gmode, errorcode;

h a */
/* Kh i t o ch
initgraph(&gdriver, &gmode, "BGI");
errorcode = graphresult();
if (errorcode != grOk) /* Thao tác kh i t o g p l i */
{
cout"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phím b t k
exit(1);
// Thoát kh i ch ng trình

}
/*

t màu n n là màu xanh da tr i*/

setbkcolor(BLUE);

/*

t màu v cho

ng tròn là màu tr ng */

setcolor(WHITE);

/* V

ng tròn */

circle(100, 120,90);

/*

t màu v cho hình ch nh t là màu tr ng */

setcolor(YELLOW);

/* V hình ch nh t */
rectangle(10,20,100,110);


/*

t màu v cho hình elip là màu

*/

setcolor(RED);

/* V hình Elip*/
ellipse(150, 140, 0, 360, 100, 60);

getch();

// Ch

closegraph();
return 0;

n 1 phím b t k

// óng ch
h a
//Thoát kh i hàm main()

}

TrÇn B¸ ¸nh

8



Sö dông th­ viÖn ®å häa cña C/C++
V. Tô màu vùng
1.void

setfillstyle(parten, color);

Thi t l p m u parten tô và m u tô color
trong ó parten có các giá tr sau:
EMPTY_FILL
SOLID_FILL
LINE_FILL
LTSLASH_FILL
SLASH_FILL
BKSLASH_FILL
LTBKSLASH_FILL
HATCH_FILL
XHATCH_FILL
INTERLEAVE_FILL
WIDE_DOT_FILL
CLOSE_DOT_FILL
USER_FILL

0
1
2
3
4
5
6

7
8
9
10
11
12

2. floodfill(x,y, color);

Tô m t vùng khép kín v i màu s c và m u tô ã
c thi t l p b i l nh floodfill
c a m t i m n m trong vùng c n tô.
Trong ó: x,y là t a
color là màu c a
ng biên vùng c n tô
ng tròn tâm có t a
là (250,200), bán kính là 100
Ví d 9: Vi t ch ng trình v
có màu là tr ng. Tô hình tròn ó v i màu .
#include <graphics.h> //th vi n ch a các hàm
h a
#include
#include
#include
#include

<stdlib.h>
<stdio.h>
<conio.h>
<iostream.h>


int main(void)
{
/* Kh i t o các gái tr ban u */
int gdriver = DETECT, gmode, errorcode;

h a */
/* Kh i t o ch
initgraph(&gdriver, &gmode, "BGI");
errorcode = graphresult();
if (errorcode != grOk) /* Thao tác kh i t o g p l i */
{
cout<<"Khong khoi tao duoc che do do hoa!!!!";
getch();
// D ng l i ch n phím b t k

TrÇn B¸ ¸nh

9


Sö dông th­ viÖn ®å häa cña C/C++
// Thoát kh i ch

exit(1);

ng trình

}


/* Thi t l p màu v cho

ng tròn */

setcolor(WHITE);
circle(250,200,100);
getch();

//Thi t l p màu tô và m u tô
setfillstyle(1, RED);

//Tô hình tròn
floodfill(250,200,WHITE);

getch();
closegraph();
return 0;

// óng ch
h a
//Thoát kh i hàm main()

}

VI. Các hàm v ch
1. void outtextxy(x, y, St);

Hi n th chu i ký t St ra màn hình t i v trí có t a
2.


(x,y)

void far settextstyle(font, direction, size)
Thi t l p Font (font), h ng (direction)và
l n (size) c a ch cho cho vi c hi n th chu i

kí t c a hàm outtextxy.
Trong ó:
font
: 0,1,2,3,4
direction : 0 Hi n th ch ngang
1 Hi n th ch d c
size
:
l n c a ch
0

1

Ch
d c

Ch ngang

3. void settextjustify(horiz, vert);

Thi t l p ch
outtextxy.

TrÇn B¸ ¸nh


canh ch nh l cho vi c hi n th chu i ký t

c a hàm outtext,

10


Sö dông th­ viÖn ®å häa cña C/C++
horiz

LEFT_TEXT
CENTER_TEXT
RIGHT_TEXT

0
1
2

Canh l
canh l
Canh l

vert

BOTTOM_TEXT
CENTER_TEXT
TOP_TEXT

0

1
2

Canh l
Canh l
Canh l

t trái sang ph i
gi a
ph i
phía d i c a dòng
gi a dòng
phía trên c a dòng

horiz
0

vert

Canh l t trái

1

Canh l

phía d

i c a dòng

Canh l


gi a dòng

canh l gi a

2

Canh l ph i Canh l

phía trên dòng

Ví d 10: Vi t ch ng trình hi n th ra màn hình dòng ch
" Xin chao cac ban " theo chi u d c
và dòng ch "Chuc moi dieu tot dep" theo chi u ngang
t i i m có t a (150,100)
#include
#include
#include
#include
#include

<graphics.h>
<stdlib.h>
<iostream.h>
<stdio.h>
<conio.h>

int main(void)
{
int gdriver = DETECT, gmode, errorcode;

char stdoc[40]=" Xin chao cac ban ";
char stngang[40] = " Chuc moi dieu tot dep ";
initgraph(&gdriver, &gmode, "c:\\bc5\\BGI");
errorcode = graphresult();
if (errorcode != grOk)
{
cout<< khong khoi tao duoc do hoa!!!";

TrÇn B¸ ¸nh

11


Sö dông th­ viÖn ®å häa cña C/C++
getch();
exit(1);
}
//

Thi t l p hi n th theo chi u d c
settextstyle(1,1,5);

//

a ch ra màn hình
outtextxy(150, 100, stdoc);
getch();

// Thi t l p hi n th theo chi u ngang
settextstyle(1,0,5);

//

a ch ra màn hình
outtextxy(150, 100, stngang);
getch();
closegraph();
return 0;

}

VII. T o ho t hình
Ý t ng: V
i t ng ra màn hinh, d ng l i m t lúc xem sau xóa i t ng
v a v , v l i i t ng t a khác. Quá trình trên di n ra xen k v i nhau t o
ra c m giác i t ng ang chuy n ng.
Cách th c hi n
B1. t màu cho i t ng c n v
B2. V
i t ng ra màn hình
B3. Ch vài giây
B4. Xóa i v a v b ng cách v l i i t ng ó v i màu là màu n n
B5. Thay i t a c a i t ng r i l p l i t B1
Ví d 11: V
#include
#include
#include
#include

ng tròn chuy n


ng qua l i trên màn màn hình

<conio.h>
<graphics.h>
<math.h>
<dos.h>

#define RADIUS 21
void banhxe()
{
double xc = 100, yc;

TrÇn B¸ ¸nh

12


Sö dông th­ viÖn ®å häa cña C/C++
yc = 448 - RADIUS;
int i=1;
while (!kbhit())
{
setcolor(YELLOW); // t màu v cho
circle(xc, yc, RADIUS);

ng

//Ch 10 mns

delay(10);

/* Xóa

it

i t ng v a v */
setcolor(BLACK);
// t màu v cho i t ng là màu n n
circle(xc, yc, RADIUS); //V l i i t ng b ng màu n n
xc = xc + i; //Thay i t a c a i t ng
if ((xc+RADIUS >=getmaxx())|| (xc-RADIUS <=0))
// i chi u chuy n ng c a bánh xe
i = -i;

}
}
void main()
{
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "C:\\bc5\\bgi");
line(0, 450, getmaxx(), 450);
line(0, 451, getmaxx(), 451);
banhxe();
getch();
closegraph();
}

Ví d 12: Vi t ch
hình

ng trình minh h a bánh xe l a chuy n


ng qua l i trên màn

/* Ve banh xe lua */
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <dos.h>
/* 1 / sqrt(2) */
#define FCT 0.7071067
/* H s
it
sang radian */
#define RADS 0.017453293

TrÇn B¸ ¸nh

13


Sö dông th­ viÖn ®å häa cña C/C++
#define RADIUS 21

//Bán kính bánh xe

void banhxelua()
{
double angle = 45, xc = 100, yc, xl, yl;
yc = 448 - RADIUS;
int i = 2;

while (!kbhit())
{
setcolor(YELLOW); // t màu v cho bánh xe
xl = RADIUS * cos(angle * RADS);
yl = RADIUS * sin(angle * RADS);
circle(xc, yc, RADIUS);
circle(xc + 100, yc, RADIUS);
setcolor(RED);
// t màu v cho tr c khu a
line(xc + xl, yc + yl, xc + xl + 100, yc + yl);
line(xc - xl, yc - yl, xc - xl + 100, yc - yl);
//Ch 10mns
delay(10);
/* Xóa các
i t ng v a v */
// t màu n n v các i t ng
setcolor(BLACK);
circle(xc, yc, RADIUS);
circle(xc + 100, yc, RADIUS);
line(xc + xl, yc + yl, xc + xl + 100, yc + yl);
line(xc - xl, yc - yl, xc - xl + 100, yc - yl);
angle += 1;
xc += i * M_PI * RADIUS / 360; //Thay i t a c a các i t
if ((xc+100+RADIUS >=getmaxx()) ||(xc-RADIUS <=0))
i = -i;
// i h ng chuy n ng c a bánh xe
}
}

ng


void main()
{
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "C:\\BC5\\BGI");
line(0, 450, getmaxx(), 450);
line(0, 451, getmaxx(), 451);
banhxelua();
getch();
closegraph();
}

TrÇn B¸ ¸nh

14



×