




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告实验名称 C程序绘图基础 评分 实验日期 2012 年 5 月 4 日 指导教师 姓名 专业班级 计算机0902 学号 200903010239 一、实验目的1掌握绘图时的步骤。2掌握C语言中的基本绘图函数及其用法。(画圆函数circle( ),以及画线函数line(),自定义函数)3掌握简单动画的实现方法。二、实验要求1、编写一个正方形程序(每一个比前一个稍小),并在其中用不同颜色画15个正方形。2、编写一辆自行车一公路上由右至左快速行驶的程序。自行图案可自行设计。三、用C语言编写绘画程序的主要步骤及绘图函数(一)、用C语言绘制图形的步骤1、为了调用C语言提供的图形库函数,在程序的开头写上文件的包含命令;# include 2、图形系统初始化及关闭图形方式初始化是通过调用 initgraph( )函数来完成 ,它的调用格式为:initgraph (* gdriver,* gmode,* path);该函数的功能是通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将显示器设置到指定图形方式下。参数gdriver, gmode, path的含义参见教材的有关章节。在运行图形程序结束后,又要回到文本方式,以进行其它工作,这时应关闭图形方式。其格式为:closegraph( )。3、图形显示器的工作方式文本模式与字符坐标系在未通过图形初始化之前的屏幕上,只能显示字符的方式称为文本模式。C语言能在指定位置显示字符,该坐标系以屏幕的左上角为坐标原点,水平向为x轴,自左向右;垂直方向为y轴,自上向下,坐标原点为(1,1)。能显示的行数、列数及颜色与显示方式有关。Turbo C支持6种不同的文本显示方式。O(0,0)maxxmaxy图形模式与点坐标系在屏幕上能显示图形的方式称为图形方式。屏幕是由像素点组成的,通过initgraph函数的gmode参数来指定屏幕的分辨率,分辨率决定了像素点的多少。在图形方式下,屏幕上每个像素的显示位置用点坐标系来描述。在该坐标系中,屏幕的左上角为坐标原点O(0,0),水平向为x轴,自左向右;垂直方向为y轴,自上向下。如图1-1所示。分辨率不同,水平方向和垂直方向上的点数也不一样,即其maxx、maxy的数值不同。在Turbo C中,坐标数据有两种形式给出:一种是绝对坐标;另一种是相对坐标。绝对坐标的参考点是坐标的原点O(0,0),x 和y的值只能取规定范围内的正整数,其坐标值在整个屏幕范围内确定。相对坐标是相对于“当前点”的坐标,所以其参考点不是坐标系的原点,而是当前点。要相对坐标中,x和y的取值是相对于当前点在X方向和Y方向上的增量,这个增量可以是正的,也可以是负的,所以x和y的值可以是正整数,也可以是负整数。此外,把在一个窗口范围内确定的坐标也称为相对坐标。(二)、C语言中的基本绘图函数及其用法1、绘图函数在用绘图函数作图时,有的绘图函数坐标是相对于坐标原点,用绝对坐标。有的绘图函数用相对坐标,这时要随时注意图形的“当前点位置”,它是绘图的起始位置。也就是说,图形总是从当前点开始画图。画完一个图形后,有的当前点不变,仍在原来的位置;而有时会移到新的位置。1) 直线类绘图函数用直线类函数绘制直线图形,可以用两种坐标:一种是绝对坐标;另一种是相对坐标。几个常用的函数: 点的绝对定位函数 moveto(x,y) 点的相对定位函数 moverel(deltayx,deltay)它们不绘制图形,只改变当前点的位置,接着用绘图函数绘图。 指定两个绝对点绘直线函数: line(x1,y1,x2,y2) 该函数不改变当前点的位置。 从当前点到指定的绝对点绘直线函数: lineto(x,y) 该函数画线的同时,将当前点的位置移到(x,y)。 从当前点到指定的相对点绘直线函数:linerel(dx,dy) 该函数画线的同时,将当前点的位置移到(x+dx,y+dy)。设当前坐标为(x,y)则linerel(dx,dy)与lineto(x+dx,y+dy)等价。 读取当前点的位置x,y函数分别为: getx(void),gety(void) 读取x,y轴的最大值函数分别为:getmaxx(void),getmaxy(void)2) 多边形类绘图函数画矩形函数 :rectangle(x1,y1,x2,y2);画多边形函数:drawpoly(n ,* polypoints)其中参数,n为多边形数;* polypoints 指向一个整形数组,共有2n 个整数组成,每对整数给出了一个多边形顶点(x,y)坐标。 2、图形属性的设置图形属性的设置包括绘制该图形所用的颜色和线型。颜色又分为背景色和前景色:背景色指的是屏幕的颜色,即绘图时的底色;前景是指绘图时图形线条所用的颜色。背景色和前景色的设置,只对设置后所绘制的颜色和线型有作用,对已经绘制的图形无作用。设置前景色设置前景颜色所用的函数 setcolor。其调用格式为:setcolor(color);其中color为一个整型数值,代表所取的颜色。设置背景色设置背景颜色所用的函数 sebktcolor。其调用格式为:setbkcolor(color);其中color为一个整型数值,代表所取的颜色。3)设置线型设置当前绘图所用的线型和线宽,用函数 setlinestyle。线型和线宽的设置仅限于对直线类图形有效。其调用格式为:setlinestyle(sty,pat,b);sty:整型值,用来定义所画直线的类型;pat用户定义线型使用; b整型值,用来定义定义所画直线的线宽。在屏幕上绘制出各种简单的几何图形,要求设置不同的线形和颜色。填充填空是指用指定的模式和颜色来填空一个指定的封闭区域。1) 设置当前的填充模式和颜色设置填充模式和颜色,用函数setfillstyle,其调用格式为:setfillstyle(pattern,color);2) 实施填充对于指定的一块有界的封闭区域进行填充操作,用函数floodfill,其调用格式为:floodfill(x,y,bcolor);参数(x,y)指位于填充区域内任意一点的坐标,该点作为填充的起始点,参数bcolor作为填充区域的边界颜色。如果起始点在封闭区域内,则区域内部被填充;如果起始点在封闭区域外,则区域外部被填充。同学们可以自行验证。3) 其它填充函数以下几个填充函数,均须事先由setfillstyle 函数指定当前的填充模式和颜色。 绘制并填充实椭圆函数: fillellipse(x,y,rx,ry); 绘制并填充实椭圆扇区函数: sector(x,y,angs,ange,rx,ry) 绘制并填充多边形函数:fillpoly(nps ,*pxy)屏幕管理Turbo C2.0 提供了11个函数,用于对屏幕和视区进行管理。1)设置视图区在图形方式下,可用函数setviewport在屏幕上定义一个视图区。视图区相当于一个用于绘图的窗口。视图区的位置和大小用屏幕的绝对坐标定义,并且可把视图区设置为裁剪和不裁剪两种状态。函数setviewport的调用格式为:setviewport(x1,y1,x2,y2,c);参数x1,y1:为视图区矩形的左上角顶点坐标;x2,y2:为视图区矩形的右下角顶点坐标。c为裁剪状态参数。c=1,超出视图区的图形部分被自动裁剪掉;c=0时,对超出部分不作裁剪处理。应注意:视图区建立以后,所有的图形输出坐标都是相对于当前视图区的,即视图区左上角点为坐标(0,0)点,而与视图区和图形在屏幕上的位置无关。在默认情况下,整个屏幕为一个视图区。2)清除视图区清除视图区用函数 clearviewport。它的作用是清除掉当前视图区,将当前点的位置设置于屏幕左上角(0,0)点。调用格式为:clearviewport();3)清屏清屏的函数为 cleardevice ();四、程序调试中的问题在调试过程中出现了一些问题和错误,需要不断重复调试,找到错误源加以更正(1)对程序进行编译,纠正程序中可能出现的语法错误。 (2)调试前,先运行一遍程序看看究竟将会发生什么。 (3)如果情况很糟,根据事先设计的测试方案并结合现场情况进行错误跟踪,包括单步调试、设置观察窗输出中间变量值等手段。 五、程序运行结果或数据1. 正方形2 自行车六、实验收获及体会 刚开始写程序时感觉有点棘手。应为不知道它提供的那些库函数有什么作用,各个参数代表着什么,后来通过看试验指导书,网上查资料,让我对它们有了初步的了解。这次试验收获颇多,在本次实验中,通过Turbo C2.0环境的运用,对其有了一定的掌握。通过写下这这两个程序,对C中的图形函数有了一定的了解。七、参考源程序(可附页)1.正方形部分代码#include stdafx.h#include graphics.h#include int _tmain(int argc, _TCHAR* argv) int gdriver=DETECT,gmode,errorcode; int i,c,x,y; int dx, dy; printf(input color number:n); scanf(%d,&c); initgraph(&gdriver,&gmode,); cleardevice(); x = 5; y = 5; dx = 20; dy = 20; for (i = c; i c+20; +i) setcolor(RED); rectangle(x +dx, y+dy, x+300-dx, y+300-dy); dx += 10; dy += 10; setfillstyle(1, i); floodfill(x+dx+1,y+dy+1,RED); getche(); closegraph();return 0;2自行车部分代码 #include stdafx.h#include graphics.h#include /* x,y为单车后轮中心坐标*/void graph1(int x, int y, int radius)int save_x, save_y, save_x1, save_y1, save_x2, save_y2, save_x3, save_y3,save_x4, save_y4;setcolor(BROWN);setlinestyle(SOLID_LINE, 0, 100);line(0, y+20, getmaxx(), y+20);setcolor(WHITE);setlinestyle(SOLID_LINE, 0, 1);save_x = x;save_y = y;circle(x, y, radius);save_x1 = x+30;save_y1 = y-40;save_x2 = x+60;save_y2 = y;line(x, y, save_x1, save_y1);line(x, y, save_x2, save_y2);line(save_x1, save_y1, save_x2, save_y2);line (x, y , x+15, y+14);line(x, y, x+15, y - 14);line(x, y, x - 8, y-16);line(x, y, x -5, y +18);circle(save_x2, save_y2, 5);save_x3 = save_x2+60;save_y3 = save_y2;circle(save_x3, save_y3,radius);save_x4 = save_x2 + 30;save_y4 = save_y2 - 40;line(save_x2, save_y2, save_x4, save_y4);line(save_x3, save_y3, save_x4, save_y4);line(save_x2, save_y2-5, save_x3, save_y3);line(save_x2, save_y2+5, save_x3,save_y3);line (save_x1, save_y1, save_x4+40, save_y4);line(save_x1, save_y1, save_x1, save_y1-8);line(save_x1, save_y1-8, save_x1+5,save_y1-6);line(save_x1, save
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论