Khoa công nghệ thông tin bài giảng LẬp trình cơ BẢn biên soạn



tải về 1.56 Mb.
trang28/29
Chuyển đổi dữ liệu30.08.2016
Kích1.56 Mb.
#28834
1   ...   21   22   23   24   25   26   27   28   29

II. Các hàm đồ hoạ

1. Mẫu và màu


  • Đặt màu nền: đặt màu cho toàn bộ nền trong Turbo C, trong DevC++ đặt màu nền cho các lệnh có vẽ nền ở sau.

Cú pháp: void setbkcolor(int cl);

+ cl: là màu cần đặt, xem bảng màu ở dưới

trong DevC++ có thể sử dụng thêm lệnh bar để điền toàn bộ màn hình với màu nền.


  • Đặt màu đường vẽ: Để đặt màu vẽ đường trong các lệnh vẽ sau đó.

Cú pháp: void setcolor(int cl);

+ cl: màu cần đặt, xem bảng màu ở dưới



  • Đặt mẫu (kiểu) tô và màu tô: Để đặt mẫu (kiểu) tô và màu tô ta dùng thủ tục có điền nền.

Cú pháp: void setfillstyle(int par, int cl);

+ pr: kiểu điền, theo bảng ở dưới

+ cl: kiểu màu, theo bảng ở dưới.

Bảng 13-2



Các giá trị màu

Tên hằng

Giá trị số

Màu hiển thị

BLACK

0

Đen

blue

1

Xanh da trời

GREEN

2

Xanh lá cây

CYAN

3

Xanh lơ

RED

4

Đỏ

MAGENTA

5

Tím

BROWN

6

Nâu

LIGHTGRAY

7

Xám nhạt

DARKGRAY

8

Xám đậm

LIGHTBLUE

9

Xanh xa trời nhạt

LIGHTGREEN

10

Xanh lá cây nhạt

lightcyan

11

Xanh lơ nhạt

lightred

12

Đỏ nhạt

lightmagenta

13

Tím nhạt

yellow

14

Vàng

white

15

Trắng

Bảng 13-3

Các kiểu mẫu tô

Tên hằng

Giá trị số

Kiểu mẫu tô

EMPTY_FILL

0

Tô bằng mầu nền

SOLID_FILL

1

Tô bằng đường liền nét

LINE_FILL

2

Tô bằng đường --------

LTSLASH_FILL

3

Tô bằng ///

SLASH_FILL

4

Tô bằng /// in đậm

BKSLASH_FILL

5

Tô bằng \\\ in đậm

LTBKSLASH_FILL

6

Tô bằng \\\

HATCH_FILL

7

Tô bằng đường gạch bóng nhạt

XHATCH_FILL

8

Tô bằng đường gạch bóng chữ thập

INTERLEAVE_FILL

9

Tô bằng đường đứt quãng

WIDE_DOT_FILL

10

Tô bằng dấu chấm thưa

CLOSE_DOT_FILL

11

Tô bằng dấu chấm mau










  • Chọn lại giá trị màu cho màu cơ bản: 16 màu cơ bản được chọn từ danh sách 256 màu. Hệ thống cho người dùng tự chọn lại màu cơ bản từ 256 màu.

Cú pháp: void setpalette(int clOr, int cl );

+ clOr: vị trí của màu trong bảng màu cơ bản

+ cl: Màu được đưa vào theo danh sách 256;

Ví dụ: Câu lệnh: setpalette(0,lightcyan); đổi màu đầu tiên trong bảng màu thành màu xanh lơ nhạt. Các màu khác không bị ảnh hưởng. Lệnh này không thực sự có hiệu quả trong DevC++;



  • Lấy bảng màu hiện thời:

- Lấy màu vẽ hiện thời, trả về mầu đã xác định bằng thủ tục setcolor ngay trước nó.

Cú pháp: int getcolor()

- Lấy màu nền hiện thời, trả về màu nên đã đặt bởi hàm setbkcolor trước đó.



pháp: int getbkcolor()

2. Vẽ và tô màu đường tròn


Có thể chia các đường và hình thành bốn nhóm chính:

  • Cung tròn và hình tròn.

  • Đường gấp khúc và đa giác.

  • Đường thẳng.

  • Hình chữ nhật.

Cung tròn và đường tròn

Nhóm này bao gồm: Cung tròn, đường tròn, cung elip và hình quạt.



  • Cung tròn: Để vẽ một cung tròn

Cú pháp: void arc(int x, int y, int gd, int gc, int r);

+ (x,y): là toạ độ tâm cung tròn.

+ gd: là góc đầu cung tròn(0 đến 360 độ).

+ gc: là góc cuối cung tròn (gd đến 360 độ).

+ r: là bán kính cung tròn .

Ví dụ:


Vẽ một cung tròn có tâm tại (100,50), góc đầu là 0, góc cuối là 180, bán kính 30.

arc(100,50,0,180,30);



  • Đường tròn: Để vẽ đường tròn

Cú pháp: void circle(int x, int y, int r);

+ (x,y) : là toạ độ tâm cung tròn.

+r : là bán kính đường tròn.

Ví dụ:


Vẽ một đường tròn có tâm tại (100,50) và bán kính 30.

circle(100,50,30);



Cú pháp: void ellipse(int x, int y, int gd, int gc, int xr, int yr);

+ (x,y) : là toạ độ tâm cung elip.

+ gd : là góc đầu cung tròn(0 đến 360 độ).

+ gc : là góc cuối cung tròn (gd đến 360 độ).

+ xr : là bán trục nằm ngang.

+ yr : là bán trục thẳng đứng.

Ví dụ:

Vẽ một cung elip có tâm tại (100,50), góc đầu là 0, góc cuối là 180, bán trục ngang 30, bán trục đứng là 20.



ellipse(100,50,0,180,30,20);

  • Hình quạt: Để vẽ và tô màu một hình quạt

Cú pháp: void pieslice(int x, int y, int gd, int gc, int r);

+ (x,y) : là toạ độ tâm hình quạt.

+ gd : là góc đầu hình quạt (0 đến 360 độ).

+ gc : là góc cuối hình quạt (gd đến 360 độ).

+ r: là bán kính hình quạt .

Ví dụ: Chương trình dưới đây sẽ vẽ một cung tròn ở góc phần tư thứ nhất, một cung elip ở góc phần tư thứ ba, một đường tròn và một hình quạt quét từ 90 đến 360 độ.

# include "graphics.h"

#include "stdio.h"

#include "conio.h"

main()


{

int md=0,mode;

initgraph(&md,&mode,"C:\\TC\\BGI");

setbkcolor(BLUE);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,RED);;

arc(160,50,0,90,45);

circle(160,150,45);

pieslice(480,150,90,360,45);

getch();


closegraph();

}

3. Vẽ đường gấp khúc và đa giác


  • Vẽ đường gấp khúc: Muốn vẽ đường gấp khúc đi qua n điểm: (x1,y1), (x2,y2), ...., (xn,yn) các toạ độ (xi,yi) được gán cho một mảng a kiểu int theo nguyên tắc sau:

Toạ độ x1 gán cho a[0]

Toạ độ y1 gán cho a[1]

Toạ độ x2 gán cho a[2]

Toạ độ y2 gán cho a[3]

....

Toạ độ xn gán cho a[2n-2]



Toạ độ yn gán cho a[2n-1]

Sau đó gọi hàm:



Cú pháp: void drawpoly(n,a);

n: số điểm cần vẽ tương ứng số lượng điểm được lưu trữ trong a

a: Các điểm trên đường gấp khúc được lưu trữ theo mô hình trên

Nếu điểm cuối cùng (xn,yn) trùng với điểm đầu (x1,y1) thì đường gấp khúc khúc khép kín.

Ví dụ vẽ tam giác

int a[8]={10,10,100,100,10,100,10,10};

drawpoly(4,a);


  • Tô màu đa giác: Vẽ đa giác và tô màu cho phần đa giác đã vẽ

Cú pháp: void fillpoly(n,a);

n: số điểm cần vẽ

a: danh sách các điểm cần vẽ

sẽ vẽ và tô màu một đa giác có đỉnh là các điểm (x1,y1), (x2,y2), ...., (xn,yn)

Ví dụ: Vẽ một đường gấp khúc và hai đường tam giác.

#include "graphics.h"

#include "stdio.h"

#include "conio.h"

int poly1[]={5,200,190,5,100,300};

int poly2[]={205,200,390,5,300,300};

int poly3[]={405,200,590,5,500,300,405,200};

main()


{

int md=0,mode;

initgraph(&md,&mode,"C:\\TC\\BGI");

setbkcolor(CYAN);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,MAGENTA);

drawpoly(3,poly1);

fillpoly(3,poly2);

fillpoly(4,poly3);

getch();


closegraph();

}


  • Vẽ đường thẳng: đường thẳng nối hai điểm

Cú pháp: void line(int x1, int y1, int x2, int y2);

+ (x1,y1): tọa độ điểm 1

+ (x2,y2): tọa độ điểm 2


  • Vẽ đường thẳng: đường thẳng từ điểm con trỏ đồ họa hiện tại đến điểm mới

Cú pháp: void lineto(int x, int y);

(x,y): điểm sẽ vẽ đến từ con trỏ đồ họa hiện tại



  • Vẽ đường thẳng: đường thẳng từ điểm con trỏ đồ họa hiện tại đến điểm cách điểm hiện tại một khoảng

Cú pháp: void linerel(int dx, int dy);

(dx,dy): khoảng cách với con trỏ đồ họa hiện tại, nếu điểm hiện tại là (x,y) thì điểm mới cần vẽ là (x+dx, y+dy)



  • Di chuyển con chạy đồ hoạ: Để di chuyển con chạy đến vị trí mới

Cú pháp: void moveto(int x, int y);

+ (x,y): điểm con trỏ đồ họa mới

Ví dụ:

moveto(200,100);



line(100,100,1,1);

lineto(100,200);

linerel(100,100);


  • Chọn kiểu đường: kiểu đường để vẽ các đường thẳng, đa giác ,…

Cú pháp : void setlinestyle(int linestyle, int par, int thin);

+ linestyle : kiểu đường, được miêu tả ở dưới

+ par : nếu tham số thứ nhất là USERBIT_LINE thì tuân thủ theo bit của tham số này để tạo ra điểm vẽ.

+ thin : độ dày của đường được miêu tả ở dưới

Bảng 13-4



Mô tả kiểu đường

Tên hằng

Giá trị số

Kiểu đường

SOLID_LINE

0

Nét liền

DOTTED_LINE

1

Nét chấm

CENTER_LINE

2

Nét chấm gạch

DASHED_LINE

3

Nét gạch

USERBIT_LINE

4

Mẫu tự tạo

Bảng 13-5

Mô tả độ dày của đường

Tên hằng

Giá trị số

Bề dày

NORM_WIDTH

1

Bề dày bình thường

THICK_WIDTH

3

Bề dày gấp ba

Ví dụ: Chương trình vẽ một đường gấp khúc bằng các đoạn thẳng. Đường gấp khúc đi qua các đỉnh sau:

(20,20),(620,20),(620,180),(20,180) và (320,100)

#include "graphics.h"

#include "stdio.h"

#include "conio.h"

main()

{

int mh=0, mode;



initgraph(&mh,&mode,"C:\\TC\\BGI");

setbkcolor(BLUE);

setcolor(YELLOW);

setlinestyle(SOLID-LINE,0,THICK_WIDTH);

moveto(320,100); /* con ch?y ? v? trí ( 320,100 ) */

line(20,20,620,20); /* con ch?y v?n ? v? trí ( 320,100 ) */

linerel(-300,80);

lineto(620,180);

lineto(620,20);

getch();


closegraph();

}

4. Vẽ điểm, miền


  • Vẽ điểm: vẽ điểm ảnh trên màn hình với màu xác định

Cú pháp: void putpixel(int x, int y, int color);

+ (x,y): tọa độ điểm cần vẽ

+ color: màu vẽ


  • Lấy màu điểm vẽ: xác định màu của một điểm trên màn hình

Cú pháp: unsigned getpixel(int x, int y);

+ (x,y): Tọa độ của điểm cần lấy màu

+ giá trị trả vè là màu của điểm trên màn hình


  • Tô miền: Tô màu cho một miền kín được xác định bởi màu biên, nếu vùng không kín sẽ tô màu hết vùng làm việc.

Cú pháp: void floodfill(int x, int y, int border);

+(x,y): tọa độ xác định điểm tô màu đầu tiên

+ border: màu của vùng biên

Ví dụ: Vẽ một đường tròn màu đỏ trên màn hình màu xanh. Toạ độ (x,y) của điểm gieo được nạp từ bàn phím. Tuỳ thuộc giá trị cụ thể của x,y chương trình sẽ tô màu vàng cho hình tròn hoặc phần màn hình bên ngoài hình tròn.

#include "graphics.h"

#include "stdio.h"

#include

main()


{

int mh=0,mode=0, x, y;

printf("\nVao toa do x,y:");

scanf("%d%d",&x,&y);

initgraph(&mh,&mode,"");

setbkcolor(BLUE);

setcolor(RED);

setfillstyle(11,YELLOW);

circle(320,100,50);

moveto(1,150);

floodfill(x,y,RED);

getch();


closegraph();

}

5. Hình chữ nhật


  • Vẽ hình chữ nhật: xác định hai đỉnh là góc trái trên cùng, và góc phải dưới cùng của hình chữ nhật

Cú pháp: void rectangle(int x1, int y1, int x2, int y2);

+ (x1,y1) : tọa độ góc trái, phía trên hình chữ nhật

+ (x2,y2) : tọa độ góc phải phía dưới hình chữ nhật


  • Vẽ hình chữ nhật được to kín: vẽ hình chữ nhật với miền trong được tô màu

Cú pháp : void bar(int x1, int y1, int x2, int y2);

+ (x1,y1) : tọa độ góc trái, phía trên hình chữ nhật

+ (x2,y2) : tọa độ góc phải phía dưới hình chữ nhật


  • Vẽ hình chữ nhật có tô bóng: vẽ hình chữ nhật có tô bóng 3D.

Cú pháp: void bar3d(int x1, int y1, int x2, int y2, int depth, int top);

+ (x1,y1) : tọa độ góc trái, phía trên hình chữ nhật

+ (x2,y2) : tọa độ góc phải phía dưới hình chữ nhật

+ depth: độ sâu của tô bóng

+ top: vẽ đỉnh (0: không vẽ, 1: vẽ)

Ví dụ: Chương trình dưới đây tạo nên một hình chữ nhật, một khối hình chữ nhật và một hình hộp có nắp:

#include "graphics.h"

main()


{

int mh=0,mode=0;

initgraph(&mh,&mode,"");

setbkcolor(GREEN);

setcolor(RED);

setfillstyle(CLOSE_DOT_FILL,YELLOW);

rectangle(5,5,300,160);

bar(3,175,300,340);

bar3d(320,100,500,340,100,1);

getch();


closegraph();

}

6. Cửa sổ (Viewport)


  • Thiết lập viewport: tạo cửa sổ làm việc ảo trên màn hình.

Cú pháp: void setviewport(int x1, int y1, int x2, int y2, int clip);

+ (x1,y1) : tọa độ góc trên bên trái

+ (x2,y2) : tọa độ góc dưới bên phải

+ clip : 0 : cho phép vẽ ra ngoài viewport, 1 : không cho phép vẽ ra ngoài viewport

Ví dụ:

setviewport(100,50,200,150,0);



line(-20,-20,50,50);

Lập nên một vùng viewport hình chữ nhật có toạ độ góc trái cao là (100,50) và toạ độ góc phải thấp là (200,150) (là toạ độ trước khi đặt viewport).



Chú ý: Sau khi lập viewport, ta có hệ toạ độ mới mà góc trên bên trái sẽ có toạ độ (0,0).

  • Nhận diện viewport hiện hành: thông tin về viewport hiện hành.

Cú pháp : void getviewsetting(struct viewporttype *vp);

vp: thông tin về viewport hiện thời,

cấu trúc của viewport

struct viewporttype

{

int left,top,right,bottom;



int clip;

};


Cú pháp: void clearviewport(void);

  • Xoá màn hình, đưa con chạy về tạo độ (0,0) của màn hình:

Cú pháp: void cleardevice(void);

  • Toạ độ âm dương:

Với chế độ cho phép vẽ ra ngoài viewport, các hàm đồ họa có thể vẽ ra ngoài viewport với tọa độ âm.

int xc,yc;

xc=getmaxx()/2;

yc=getmaxy()/2;

setviewport(xc,yc,getmaxx(),getmaxy(),0);

Như thế, màn hình sẽ được chia làm bốn phần với toạ độ âm dương như sau:

Phần tư trái trên: x âm, y âm.

x: từ -getmaxx()/2 đến 0.

y: từ -getmaxy()/2 đến 0.

Phần tư trái dưới: x âm, y dương.

x: từ -getmaxx()/2 đến 0.

y: từ 0 đến getmaxy()/2.

Phần tư phải trên: x dương, y âm.

x: từ 0 đến getmaxx()/2.

y: từ -getmaxy()/2 đến 0.

Phần tư phải dưới: x dương, y dương.

x: từ 0 đến getmaxx()/2.

y: từ 0 đến getmaxy()/2.

Ví dụ: Chương trình vẽ đồ thị hàm sin x trong hệ trục toạ độ âm dương. Hoành độ x lấy các giá trị từ -4 đến 4. Trong chương trình có sử dụng hai hàm mới là settextjustify và outtextxy ta sẽ đề cập ngay trong phần sau.

#include "graphics.h"

#include "conio.h"

#include "math.h"

#define TYLEX 20

#define TYLEY 60

main()

{

int mh=0,mode=DETECT;



int x,y,i;

initgraph(&mh,&mode,"");

setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);

setbkcolor(BLUE);

setcolor(YELLOW);

line(-getmaxx()/2,0,getmaxx()/2,0);

line(0,-getmaxy()/2,0,getmaxy()/2);

settextjustify(1,1);

setcolor(WHITE);

outtextxy(0,0,"(0,0)");

for (i=-400;i<=400;++i)

{

x=floor(2*M_PI*i*TYLEX/200);



y=floor(sin(2*M_PI*i/200)*TYLEY);

putpixel(x,y,WHITE);

}

getch();


closegraph();

}


Каталог: files -> FileMonHoc
FileMonHoc -> NGÂn hàng câu hỏi lập trình cơ BẢn nhóm câu hỏI 2 ĐIỂM
FileMonHoc -> CHƯƠng 2 giới thiệu về LÝ thuyết số
FileMonHoc -> CÁc hệ MẬt khoá CÔng khai kháC
FileMonHoc -> BỘ MÔn duyệt chủ nhiệm Bộ môn
FileMonHoc -> Khoa công nghệ thông tin cộng hòa xã HỘi chủ nghĩa việt nam
FileMonHoc -> Chủ nhiệm Bộ môn Ngô Thành Long ĐỀ CƯƠng chi tiết bài giảNG
FileMonHoc -> Chủ nhiệm Bộ môn Phan Nguyên Hải ĐỀ CƯƠng chi tiết bài giảNG
FileMonHoc -> Khoa: CÔng nghệ thông tin cộng hòa xã HỘi chủ nghĩa việt nam
FileMonHoc -> MẬt mã khóA ĐỐi xứng lý thuyết cơ bản của Shannon
FileMonHoc -> Khoa cntt cộng hòa xã HỘi chủ nghĩa việt nam

tải về 1.56 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   21   22   23   24   25   26   27   28   29




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương