intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: ™——† Lvlr. DK †——™ »»» V.I.P ««« | Ngày: | Loại File: PDF | Số trang:0

261
lượt xem
77
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

I. Một số lưu ý chung: * Yêu cầu tối thiểu phải có tập tin EGAVGABGI (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á hàm liên quan đến màng hình trong chế độ văn bản như printf, cont, scantf, 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 đồ hoạ nào, ta đưa con trỏ về tên hàm trong chương trình sau đó nhấn tổ hợp phím CTRL + FI khi đó máy sẽ hiện...

Chủ đề:
Lưu

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

  1. 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ườ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 : Đường dẫn tới thư mục chứa các tập tin hỗ trợ đồ họa path 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) CGA 1 MCGA 2 EGA 3 EGA64 4 EGAMONO 5 IBM8514 6 HERCMONO 7 ATT400 8 VGA 9 PC3270 10 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. TrÇn B¸ ¸nh 1
  2. Sö dông th­ viÖn ®å häa cña C/C++ Ví 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 //thư viện chứa các hàm đồ họa #include #include #include #include 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
  3. 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 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) getmaxx() (0,0) getmaxy() 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 //thư viện chứa các hàm đồ họa #include #include #include #include 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
  4. 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); //dừng lại để xem getch(); 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(); //Lấy chiều cao lớn nhất của màn hình maxy = getmaxy(); //Lấy điểm chính giữa màn hình theo x x = maxx/2; //Lấy điểm chính giữa màn hình theo y y = maxy/2; //bán kính đường tròn r = 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(); //Đóng chế độ đồ họa closegraph(); //Thoát khỏi hàm main() 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 độ (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: Màu giá trị BLACK 0 BLUE 1 GREEN 2 CYAN 3 RED 4 MAGENTA 5 BROWN 6 LIGHTGRAY 7 DARKGRAY 8 LIGHTBLUE 9 LIGHTGREEN 10 LIGHTCYAN 11 TrÇn B¸ ¸nh 4
  5. Sö dông th­ viÖn ®å häa cña C/C++ LIGHTRED 12 LIGHTMAGENTA 13 YELLOW 14 WHITE 15 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); putpixel(20, 15, 4); Hoặc: 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 //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
  6. Sö dông th­ viÖn ®å häa cña C/C++ } getch(); //Đóng chế độ đồ họa closegraph(); } 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); TrÇn B¸ ¸nh 6
  7. 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) - 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 đỏ //thư viện chứa các hàm đồ họa #include #include #include #include #include TrÇn B¸ ¸nh 7
  8. 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; /* 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!!!!"; // Dừng lại chờ ấn phím bất kỳ getch(); // Thoát khỏi chương trình exit(1); } /* Đặ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); // Chờ ấn 1 phím bất kỳ getch(); //Đóng chế độ đồ họa closegraph(); //Thoát khỏi hàm main() return 0; } TrÇn B¸ ¸nh 8
  9. 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 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 //thư viện chứa các hàm đồ họa #include #include #include #include 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
  10. Sö dông th­ viÖn ®å häa cña C/C++ // Thoát khỏi chương trình exit(1); } /* 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(); //Đóng chế độ đồ họa closegraph(); //Thoát khỏi hàm main() return 0; } 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ữ 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ữ ngang ữ dọc Ch 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. TrÇn B¸ ¸nh 10
  11. Sö dông th­ viÖn ®å häa cña C/C++ horiz 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 horiz vert 0 Canh lề từ trái Canh lề ở phía dưới của dòng 1 canh lề giữa Canh lề ở giữa dòng 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 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
  12. 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ẽ đường tròn chuyển động qua lại trên màn màn hình #include #include #include #include #define RADIUS 21 void banhxe() { double xc = 100, yc; TrÇn B¸ ¸nh 12
  13. 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 đối tượng circle(xc, yc, RADIUS); delay(10); //Chờ 10 mns /* 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
  14. 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); delay(10); //Chờ 10mns /* 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2