Ch vài giây B4.
Trang 1H 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 ng các t p tin h
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 v n b n nh
printf, cout, scanf, cin, trong khi dùng ch h a.
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 h a, ta nh n t h p
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 h a
gdriver: Là các giá tr t 0 n 10
H ng tr Giá tr DETECT 0 (Ng m nh máy t tìm ph n c ng thích h p)
EGAMONO 5 IBM8514 6 HERCMONO 7
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 h a, tr v ch v n b n bình th ng.
Trang 2Ví d 1: Vi t ch ng trình xây d ng hàm kh i t o h a và v m t ng tròn ra màn hình.
#include <graphics.h> //th vi n ch a các hàm h a
#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>
#include <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
}
/* Thao tác các l nh h a t i v trí này */
/* V m t ng tròn */
circle(200, 250,200); //v ng tròn có t a tâm là (200,250)và bán kính r= 200
getch(); //d ng l i xem
closegraph(); // óng ch h a
return 0; //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 c xác inh qua hai thu c tính:
- T a c a i m ó (t a c xác nh c p s nguyên (x,y))
- Màu s c c a i m ó
1 int getx()
int gety()
Các hàm trên tr v t a x, y c a con tr
Trang 32 int getmaxx()
Tr v chi u r ng t i a c a màn hình (tính b ng s pixel- i m nh)
3 int getmaxy()
Tr v chi u cao t i a c a màn hình (tính b ng s pixel- i m nh)
Hình 1: Mô ph ng t a màn hình
4 void cleardevice()
Xóa toàn b màn hình h a b ng màu n n và a con tr v v trí (0,0) c a màn 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 này và v l i ng tròn khác có tâm là chính gi a màn hình và có bán kính là n a chi u cao màn hình.
#include <graphics.h> //th vi n ch a các hàm h a
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <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
getmaxx()
getmaxy()
(0,0)
Trang 4/* 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 ó
/* L y t a chính gi a c a màn hình */
int maxx,maxy,x,y,r;
maxx = getmaxx(); //L y chi u r ng l n nh t c a màn hình
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
/*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();
closegraph(); // óng ch h a
return 0; //Thoát kh i hàm main()
}
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 ( x,y )
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:
Trang 5LIGHTRED 12
Ví d : V m t i m nh có màu ra màn hình t i t a ( 20,15 )
putpixel( 20 , 15 , RED );
Ho c: putpixel( 20 , 15 , 4 );
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 <dos.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <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 th Hàm s
{
//************************
float y=x*x*x-2*x+1; //Hàm s c n v
//************************
int X=TL*x,Y=-TL*(y);
putpixel(X,Y,2);
Trang 6getch();
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 góc trên bên trái là (x1,y1) và t a góc d i bên ph i là (x2,y2)
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);
Trang 78 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)
- N u loaibo = 90 thì cung ph n t th I c a Elip không c hi n th (xóa i cung ph n t th I)
- N u loaibo = 180 thì cung ph n t th I và II không c hi n th
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 <graphics.h> //th vi n ch a các hàm h a
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
Trang 8int 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, "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 n 1 phím b t k
closegraph(); // óng ch h a
return 0; //Thoát kh i hàm main()
}
Trang 9V 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 0 SOLID_FILL 1 LINE_FILL 2 LTSLASH_FILL 3 SLASH_FILL 4 BKSLASH_FILL 5 LTBKSLASH_FILL 6 HATCH_FILL 7 XHATCH_FILL 8 INTERLEAVE_FILL 9 WIDE_DOT_FILL 10 CLOSE_DOT_FILL 11 USER_FILL 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
Trong ó: x,y là t a c a m t i m n m trong vùng c n tô.
color là màu c a ng biên vùng c n tô
Ví d 9: Vi t ch ng trình v ng tròn tâm có t a là (250,200), bán kính là 100
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 <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.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, "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
Trang 10exit(1); // Thoát kh i ch 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(); // óng ch h a
return 0; //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 (x,y)
2 void far settextstyle(font, direction, size)
Thi t l p Font (font), h ng (direction)và l n (size) c a ch chocho 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
Ch ngang
3 void settextjustify(horiz, vert);
Thi t l p ch canh ch nh l cho vi c hi n th chu i ký t c a hàm outtext, outtextxy.
Trang 11horiz LEFT_TEXT 0 Canh l t trái sang ph i
CENTER_TEXT 1 canh l gi a RIGHT_TEXT 2 Canh l ph i vert BOTTOM_TEXT 0 Canh l phía d i c a dòng
CENTER_TEXT 1 Canh l gi a dòng TOP_TEXT 2 Canh l phía trên c a dòng
0 Canh l t trái
Canh l phía d i c a dòng
Canh l gi a dòng
" 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 <graphics.h>
#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>
#include <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)
{
Trang 12getch();
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 ng tròn chuy n ng qua l i trên màn màn hình
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <dos.h>
#define RADIUS 21
void banhxe()
{
double xc = 100, yc;
Trang 13yc = 448 - RADIUS;
int i=1;
while (!kbhit())
{
setcolor(YELLOW); // t màu v cho i t ng
circle(xc, yc, RADIUS);
/* Xóa 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 = -i; // i chi u chuy n ng c a bánh xe
}
}
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 ng trình minh h a bánh xe l a chuy n ng qua l i trên màn hình
/* 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 i t sang radian */
#define RADS 0.017453293
Trang 14#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);
/* Xóa các i t ng v a v */
setcolor(BLACK); // t màu n n v các i t ng
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 ng
if ((xc+100+RADIUS >=getmaxx()) ||(xc-RADIUS <=0))
i = -i; // i h ng chuy n ng c a bánh xe
}
}
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();
}