后,若执行outtextxy(100,120,\则(100,120)指的是所输出字符串右下角。在缺省情况 下,对齐方式是 LEFT_TEXT,TOP_TEXT,如果用outtextxy 输出上面字符串,则(100,120)指的是字符串左上角。 3.改变矢量字体宽度和高度
void far setusercharsize(int multx,int divx,
int multy,int divy); 此函数设置了用户定义的笔画字型放大系数,x、y方向的放大系数分别为multx/divx,multy/divy。调用setusercharsize()函数之后,每个显示在屏幕上的字型都以缺省值大小乘以multx/divx为字符宽,乘以multy/divy为其字符高。这种方式只是在settextstyle()函数中的charsize=0时才起作用。
用户自定义字符的大小,即USER_CHAR_SIZE(默认为0) 3.5 图形存取处理
在图形方式下,图形存取有着重要的作用,这也是图形动画的基础。图形存取的基本原理是:把屏幕上某个区域的信息存入一个缓冲区,然后在另一个区域把它的内容显示出来。 一、 检测所需内存
unsigned far imagesize(int x1,int y1,int x2,int y2);
该函数返回一个无符号整数值,它是存储图形所需的字节数。参数x1,y1,x2,y2均为整型数,用来确定要存储的屏幕区域。这个区域是一个矩形,其左上角坐标为(x1、y1),右下角坐标为(x2,y2)。 例如:执行 unsigned size;
size=imagesize(10,10,100,100); 将把存储左上角为(10,10),右下角为(100,100)的矩形区域所需的内存字节数存人变量size中。存储屏幕区域所需的字节数最多不能超过 64K-1个字节,否则返回值为-1( 0 xFFFF)。也就是说,图形存取限制在64K字节之内。 二、 图形存入内存
void far getimage(int x1,int y1,int x2,int y2,void *bitmap);
该函数将指定区域的图形从屏幕拷贝到内存区域。要复制的屏幕区域由左上角(xl,y1)和右下角(x2,y2)给出,它应当与imagesize函数中参数相同。bitmap是一个void类型指针,需要复制的屏幕区域将保存在由它所指向的数组中。 例如:void *w;
unsigned size;
size=imagesize(10,10,100,100); w=malloc(size);
getimage(10,10,100,100,w);
malloc函数的作用是得到指向大小为括号的内存区域的地址指针,它放置在stdlid.h中。 三、 从内存复制图形到屏幕
void far putimage(int x,int y,void *bitmap,int op);
该函数将getimage函数保存的图形重新送回屏幕。参数(x,y)是恢复显示图形左上角的位置,bitmap是指向void类型的指针,它指向用getimage函数复制的数组。参数op是一个整型数,是图形复制到屏幕上显示方式 参数OP的取值
如果想使原来的图形反相显示则可使用下面语句: putimage(110,10,W,NOT_PUT)
如果使用XOR-PUT,则内存中的像素与当前屏幕上的像素进行异或操作。如果两个像素都为1,则相应的位被置为0,从而使原来的图形消失。如果再复制一次,则会重新出现。利 用这一特性,可以实现动画操作。 3.6 常用画图函数简介 一、 直线类函数
1.指定两点间画一直线
void far line(int x1,int y1,int x2,int y2);
用当前颜色从点(x1,y1)到点(x2,y2)画一条直线,当前位置(CP)不变。
2.从当前位置到(x,y)点画一条直线 void far lineto(int x,int y);
用当前颜色从当前位置(CP)到(x,y)点画一条直线,并把(CP)位置定位在(x,y)点。
3.从当前坐标以相对增量方式画直线 void far linerel(int deltax, int deltay)
从当前位置到相对CP位置在X方向增大deltax,在Y方向增大deltay画一直线。 二、 多边形类函数 1、画矩形
void far rectangle(int left,int top,int right,int bottom);
用当前画笔画出由坐标(left,top)及(right ,bottom)所定义的矩形。 2.画多边形
void far drawpoly(int numpoints,int *polypoints);
用当前画笔画一多边形,多边形的顶点数为numpoints, *polypoints指向一个整型数组,共有numpoints*2个整数组成,每一对整数给出一个多边形顶点(x,y)坐标。 三、 圆弧类函数 1、画一圆弧
void far arc(int x,int y,int startangle,int endangle,int radius);
以(x,y)为圆心,radius为半径,从起角startangle到终角endangle,以当前颜色画一圆弧。 2. 画一椭圆弧
void far ellipse(int x, int y, int start,int end, int xradius, int yradius); 用当前颜色画一椭圆弧,其圆心为(x,y),x轴、y轴半径分别为xradius,yradius,起始角和结束角分别为star和end。若起始角star为0°,结束角end为360°,则画的是一个完整的椭圆。
3. 画一圆void far circle(int x, int y, int radius);
以(x,y)为圆心。以radius(用像素表示)为半径,用当前画笔颜色画一圆。 四、 填充类函数 1、画矩形条
void far bar(int left,int top ,
int right,int bottom);
画一矩形条,该条用当前填充模式和填充色填充。条的左上角由(left,top)给出,条的右下角由(right,bottom)给出。只画矩形条,不画出条形轮廓,由setfillstyle()定义填充模式和填充色。 2.画三维矩形条
void far bar3d(int left, int top,
int right, int bottom, int depth, int topflag);
画一三维矩形条,该条用当前填充模式和填充颜色填充,条左上角由(left,top)给出,条的右下角由(right,bottom)给出,以像素为单位,条形深度由depth给出,topflag不为零时则放一个顶盖,否则该三维矩形条无顶盖,由setfillstyle()函数给出填充模式和颜色。 3.画多边形并填充
void far fillpoly(int numpoints,
int *polypoints);
用当前画线类型和颜色,画一顶点数为numpoints的多边形,然后用当前填充模式和填充颜色填充这个多边形,polypoints所指数组共有numpoints*2个整数,每一对整数对应给出多边形一个顶点的x和y坐标。由setfillstyle()函数给出填充模式和颜色。 4.画一扇形并填充
void far pieslice(int x, int y, int stangle,
int endangle, int radius);
以(x,y)为圆心,radius为半径,stangle为起始角,endangle为终止角,画上扇形,并且以当前填充模式和颜色填充。该函数用当前画笔画出扇形外廓线。由setfillstyle()为函数给出模式和颜色。
5.画一个椭圆扇区并填充
void far sector(int x, int y,int stangle,
int endangle, int xradius, int yradius)
以(x,y)为圆心,xradius为水平轴,yradius为垂直轴,stangle为起始角,endangle为终止角,画一个椭圆扇区,并用当前填充模式和颜色填充,该函数用当前画笔画出椭圆扇区外廓线。由setfillstyle()函数给出模式和颜色。 九、作业 课后习题 十、本章小结
在本章中,介绍了在c语言下进行图形程序设计的基础知识:图形颜色设置,线的特性设定和填充,图形模式下文本处理等。
第4章 第四章 二维图形生成和变化技术
一、教学目标 通过对本章的学习,要求熟悉二维图形的基本绘图元素,特别是直线段的生成和曲线的生成。 二、教学要求
1、掌握直线段的生成; 2、掌握区域填充的方法。 三、教学内容提要 4.1 基本绘图元素 4.2 直线段的生成 4.3 曲线的生成 4.4 区域填充 4.5 二维图形变换 4.6 二维图像裁剪 4.7 反走样技术
四、教学重点、难点及解决方法
重点是掌握直线段和曲线的生成。 五、课时安排 8学时 六、教学设备 课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。 八、教学内容
4.1 基本绘图元素
在第二章我们已讨论过坐标系统的世界坐标系、规范坐标系和设备坐标系三种坐标系。坐标系统确定之后,需要使用不同的绘图元素来描述图形,它们是点、直线、曲线和其他基本的图形元素。 一、点
点是图形中最基本的图素,直线、曲线以及其他的图元都是点的集合。在计算机图形学中,点是用数值坐标来表示的。
在三维坐标系中点是由(x,y,z)三个数值组成的坐标表示 二、直线
一条直线是指所有在它上面的点的集合,在图形学中研究的对象是直线段。 已知线段的起点坐标(Xs, Ys)。终点坐标(Xe, Ye)这两点就确定了这条线段,并用线段上的任意一点(x, y)均满足:图形显示器是由一个个排列有序的像素所构成,画一条直线实际上是根据一系列计算出来并与该线靠近的像素而绘制。 因此,显示器划分的像素点越多分辨率越高。绘图仪绘制线段是笔在X,Y方向移动,画线时单方向的一次移动距离称为步矩,设备的步矩越小,绘出的图形越精确。 三、曲线
曲线包括圆、椭圆、弧线和由许多类型的方程所确定的图形。在计算机图形程序设计中最好将曲线定义成不能构成直线的点的集合。曲线被认为是图形学的基础。 三次参数曲线
4.2 直线段的生成
直线段是最基本的图形,因此,直线段生成的质量好坏与速度快慢将直接影响整个图形生成的质量和速度。
直线生成算法在图形软件设计中起着关键的作用。 下面介绍几种直线生成算法: ①逐点比较法
②数值微分法(DDA法)
相关推荐: