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

2019-04-01 17:38

图3.2 屏幕颜色设置与清屏程序运行结果截图2 问题3.1:说明以上运行结果。 问题3.2:按照示例填写表3.3。 表3.3 屏幕颜色设置于清屏等函数表 函数名称 函数功能及返回值 清屏函数,返回值void 函数原型 void cleardevice() 包含的头文件 graphics.h 示例: cleardevice bar3d circle delay setcolor setbkcolor getcolor getbkcolor getmaxcolor 程序练习3.2:设计并实现一个独特的屏幕颜色设置程序。 程序功能说明: 代码: 运行结果: 4基本图形函数(4学时)

基本图形函数包括画点、线以及其它一些基本图形的函数。 一、画点 1. 画点函数

void far putpixel(int x, int y, int color);

- 10 -

该函数表示有指定的象元画一个按color所确定颜色的点。对于颜色color的值可从表3.1中获得,x, y是指图形象元的坐标。

在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480 为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0, 0), 右下角坐标为(639, 479),水平方向从左到右为x轴正向,垂直方向从上到下为y轴正向。Turbo C 的图形函数都是相对于图形屏幕坐标,即象元来说的。

关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。 2. 有关坐标位置的函数 int far getmaxx(void); 返回x轴的最大值。 int far getmaxy(void); 返回y轴的最大值。 int far getx(void); 返回游标在x轴的位置。 void far gety(void); 返回游标有y轴的位置。 void far moveto(int x, int y);

移动游标到(x, y)点,不是画点,在移动过程中亦画点。 void far moverel(int dx, int dy);

移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。 二、画线 1. 画线函数

Turbo C提供了一系列画线函数: void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。 void far lineto(int x, int y);

- 11 -

画一作从现行游标到点到(x, y)的直线。 void far linerel(int dx, int dy);

画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线。 void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。

void far arc(int x, int y, int stangle, int endangle, int radius);

以(x, y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。在Turbo C中规定x轴正向为0度, 逆时针方向旋转一周,依次为90, 180, 270和360度(其它有关函数也按此规定, 不再重述)。

void ellipse(int x, int y, int stangle, int endangle, int xradius,int yradius); 以(x, y)为中心,xradius, yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0, endangle=360时,画出一个完整的椭圆。

void far rectangle(int x1, int y1, int x2, inty2);

以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。 void far drawpoly(int numpoints, int far *polypoints);

画一个顶点数为numpoints, 各顶点坐标由polypoints 给出的多边形。 polypoints整型数组必须至少有2倍顶点数个元素。每一个顶点的坐标都定义为x,y, 并且x在前。值得注意的是当画一个封闭的多边形时, numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。

例4.1:用drawpoly()函数画箭头。 #include

#include int main() {

int gdriver, gmode, i;

int arw[16]={200, 102, 300, 102, 300, 107, 330,100, 300, 93, 300, 98, 200, 98, 200, 102};

- 12 -

gdriver=DETECT;

registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode, \ setbkcolor(BLUE); cleardevice();

setcolor(12); /*设置作图颜色*/ drawpoly(8, arw); /*画一箭头*/ getch(); closegraph(); return 0; }

2. 设定线型函数

在没有对线的特性进行设定之前, Turbo C用其默认值, 即一点宽的实线,但Turbo C也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择: 一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。 void far setlinestyle(int linestyle, unsigned upattern, intthickness);

该函数用来设置线的有关信息,其中linestyle是线形状的规定,见表4.1,thickness是线的宽度,见表4.2。

表4.1 有关线的形状(linestyle)

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

符号常数 数值 含义 ───────────────────────── SOLID_LINE CENTER_LINE

0 实线 2 中心线 3 点画线 4 用户定义线

DOTTED_LINE 1 点线 DASHED_LINE USERBIT_LINE

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

表4.2 有关线宽(thickness)

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

符号常数

- 13 -

数值 含义

───────────────────────── NORM_WIDTH THIC_WIDTH

1 一点宽 3 三点宽

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

对于upattern, 只有linestyle选USERBIT_LINE 时才有意义( 选其它线型,uppattern取0即可)。uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。

void far getlinesettings(struct linesettingstype far *lineinfo);

该函数将有关线的信息存放到由lineinfo 指向的结构中,linesettingstype的结构如下:

struct linesettingstype{

int linestyle; unsigned upattern; int thickness; }

下面两句程序可以读出当前线的特性: struct linesettingstype *info; getlinesettings(info);

void far setwritemode(int mode);

该函数规定画线的方式。如果mode=0, 则表示画线时将所画位置的原来信息覆盖了(这是Turbo C的默认方式)。如果mode=1, 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作, 实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。

例4.2:有关线型设定和画线函数的例子。 #include

#include int main() {

int gdriver, gmode, i; gdriver=DETECT;

- 14 -


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

下一篇:量比

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

马上注册会员

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