C语言项目实践指导书(图形程序设计)(4)

2019-04-01 17:38

registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode, \ setbkcolor(BLUE); cleardevice(); setcolor(GREEN); circle(320, 240, 98); setlinestyle(0, 0, 3); /*设置三点宽实线*/ setcolor(2); rectangle(220, 140, 420, 340); setcolor(WHITE); setlinestyle(4, 0xaaaa, 1); /*设置一点宽用户定义线*/ line(220, 240, 420, 240); line(320, 140, 320, 340); getch(); closegraph(); return 0; } 程序练习4.1:编辑例4.1程序,存为.c文件,在TC环境下编译、调试、运行,运行结果截图。 程序练习4.2:编辑例4.2程序,存为.c文件,在TC环境下编译、调试、运行,运行结果截图。 问题4.1:在表4.3中填写10个以上画点、画线(直线、圆、矩形)和线型设定的函数。 表4.3 基本图形函数表 函数名称

函数功能及返回值 - 15 -

函数原型 包含的头文件

程序练习4.3:设计并实现一个独特的图形绘制程序。 程序功能说明: 代码: 运行结果: 5封闭图形的填充(4学时)

填充就是用规定的颜色和图模填满一个封闭图形。 一、先画轮廓再填充

Turbo C提供了一些先画出基本图形轮廓, 再按规定图模和颜色填充整个封闭图形的函数。在没有改变填充方式时, Turbo C以默认方式填充。

void far bar(int x1, int y1, int x2, int y2);

确定一个以(x1, y1)为左上角, (x2, y2)为右下角的矩形窗口, 再按规定图模和颜色填充。

说明:此函数不画出边框,所以填充色为边框。

void far bar3d(int x1, int y1, int x2, int y2, int depth, inttopflag);

当topflag为非0时, 画出一个三维的长方体。当topflag为0时,三维图形不封顶, 实际上很少这样使用。

说明: bar3d()函数中, 长方体第三维的方向不随任何参数而变, 即始终为45度的方向。

void far pieslice(int x, int y, int stangle, int endangle, intradius);

- 16 -

画一个以(x, y)为圆心,radius为半径,stangle为起始角度,endangle 为终止角度的扇形,再按规定方式填充。当stangle=0, endangle=360 时变成一个实心圆,并在圆内从圆点沿X轴正向画一条半径。

void far sector(int x, int y, int stanle, intendangle, intxradius, int yradius); 画一个以(x, y)为圆心分别以xradius, yradius为x轴和y轴半径,stangle 为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。 二、设定填充方式

Turbo C有四个与填充方式有关的函数: void far setfillstyle(int pattern, int color);

color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的。符号常数如表5.1所示。

表5.1关于填充式样pattern的规定

━━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 EMPTY_FILL SOLID_FILL LINE_FILL

数值 含义 0 以背景颜色填充 1 以实填充 2 以直线填充 3 以斜线填充(阴影线) 4 以粗斜线填充(粗阴影线) 5 以粗反斜线填充(粗阴影线) 6 以反斜线填充(阴影线) 7 以直方网格填充 8 以斜网格填充 10 以稀疏点填充 11 以密集点填充 12 以用户定义式样填充

───────────────────────────

LTSLASH_FILL SLASH_FILL BKSLASH_FILL LTBKSLASH_FILL HATCH_FILL

XHATCH_FILL WIDE_DOT_FILL CLOSE_DOS_FILL USER_FILL

INTTERLEAVE_FILL 9 以间隔点填充

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle() 函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。 之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。

void far setfillpattern(char * upattern,int color);

设置用户定义的填充图模的颜色以供对封闭图形填充。

- 17 -

其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。

每个字节的8位二进制数表示水平8点, 8个字节表示8行, 然后以此为模型向个封闭区域填充。

void far getfillpattern(char * upattern);

该函数将用户定义的填充图模存入upattern指针指向的内存区域。 void far getfillsetings(struct fillsettingstype far * fillinfo);

获得现行图模的颜色并将存入结构指针变量fillinfo中。其中fillsettingstype 结构定义如下:

struct fillsettingstype{

int pattern; /* 现行填充模式 * / int color; /* 现行填充模式 * / };

例5.1:图形填充图模的颜色的选择。 #include

main(){

char str[8]={10,20,30,40,50,60,70,80}; /*用户定义图模*/ int gdriver,gmode,i;

struct fillsettingstype save; /*定义一个用来存储填充信息的结构变量*/ gdriver=DETECT;

initgraph(&gdriver,&gmode,\ setbkcolor(BLUE); cleardevice(); for(i=0;i<13;i++) {

setcolor(i+3);

setfillstyle(i,2+i); /* 设置填充类型 * bar(100,150,200,50); /*画矩形并填充*/ bar3d(300,100,500,200,70,1); /* 画长方体并填充*/

- 18 -

pieslice(200, 300, 90, 180, 90);/*画扇形并填充*/ sector(500,300,180,270,200,100);/*画椭圆扇形并填充*/ delay(1000); /*延时1秒*/ }

cleardevice(); setcolor(14);

setfillpattern(str, RED); bar(100,150,200,50); bar3d(300,100,500,200,70,0); pieslice(200,300,0,360,90); sector(500,300,0,360,100,50); getch();

getfillsettings(&save); /*获得用户定义的填充模式信息*/ closegraph(); clrscr();

printf(\ save.pattern, save.color); /*输出目前填充图模和颜色值*/ getch(); }

以上程序运行结束后, 在屏幕上显示出现行填充图模和颜色的常数值。 三、任意封闭图形的填充

截止目前为止,我们只能对一些特定形状的封闭图形进行填充,但还不能对任意封闭图形进行填充。为此, Turbo C 提供了一个可对任意封闭图形填充的函数,其调用格式如下:

void far floodfill(int x, int y, int border);

其中: x, y为封闭图形内的任意一点。border为边界的颜色,也就是封闭图形轮廓的颜色。调用了该函数后,将用规定的颜色和图模填满整个封闭图形。

注意:

1. 如果x或y取在边界上, 则不进行填充。

- 19 -


C语言项目实践指导书(图形程序设计)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:量比

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: