




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
滁州学院本科学年设计基于c语言的花朵绘制摘要:随着同学们对c语言的学习不断深入,为了进一步消化和巩固已学过的c 语言程序设计基础理论,学习和实践程序设计的各种技能,利用c 语言来设计各种应用程序和管理系统是帮助同学们培养编程能力的最佳的选择;这一过程中需要编写大量的程序, 而vc+6.0就是编写程序的首选环境。 可惜在 vc+6.0编程环境下只能做一些文字性的练习题,想画条直线画个圆都很难还要注册窗口类、建消息循环等等,为了解决上述问题,于是就有了这个 easyx 库。easyx 是针对 c+ 的图形库,可以帮助 c 语言初学者快速上手图形和游戏编程,同时是图形数据包graphics.h的相关插件。在easyx的协助下,vc+6.0中的花朵绘制变得简单、快捷,同时运用sleep函数对花朵绘制过程执行挂起一段时间,使花朵呈现绽放的美丽瞬间。关键词:vc+6.0;easyx;sleep函数;graphics.h函数;花朵绘制1 绪论1.1 研究背景随着同学们对c语言的学习不断深入,如何在vc+6.0编程环境下进行相应的图形绘制,已经成为困扰同学们的难题,图形绘制要应用图形数据包graphics.h,而图形数据包graphics.h是tc里面的图形库,在vc+6.0编程环境下不能够直接应用;如何顺利运用c语言的图形数据包graphics.h中相关函数,是成功绘制花朵的前提,也是花朵绘制成功的关键所在。1.2主要工作本设计根据vc+6.0编程环境对图形绘制的优弊端,运用easyx在vc+6.0编程环境中进行花朵绘制,easyx 是针对 c+ 的图形库的一款软件,可以帮助 c 语言初学者快速上手图形和游戏编程。在vc+6.0编程环境下应用c语言的图形数据包graphics.h是困难的、步骤繁琐的,而运用easyx简化了c语言的图形数据包graphics.h的应用程序。同时对sleep函数的应用,起到了对花朵绘制的补充作用,加强了花朵的绽放效果。1.3本文结构本文第1部分绪论主要说明了本文的研究背景、主要工作和实现方法。第2部分相关知识介绍了vc+6.0编程环境、easyx库的功能及运用方法和sleep函数的调用。第3部分是相关函数的介绍。以及对程序的运行结果及效果进行分析,说明花朵绘制的进程,并通过程序运行的结果对程序运行质量进行经检测和分析。2相关知识2.1图形数据包graphics.h 2.1.1 功能简介因为在 vc 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。还有计算机图形学,这门课程的重点是绘图算法,而不是 windows 编程,所以windows 绘图太复杂了。因此,我们想给大家一个更好的学习平台,就是 vc 方便的开发平台和 tc 简单的绘图功能,于是就有了这个 easyx 库。如果您刚开始学 c 语言,或者您是一位教 c 语言的老师,再或者您在教计算机图形学,那么这个库一定会让您兴奋的。2.1.2图形数据包组成(1)putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。 用法: 函数调用方式为void putpixel(int x,int y,int color); 说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。 此函数相应的头文件是graphics.h 返回值: 无 (2)getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色值。 用法: 该函数调用方式为int getpixel(int x,int y); 说明: 参数x,y为像素点坐标。 函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。 这个函数相应的头文件为graphics.h 返回值: 返回一个像素点色彩值。 (3)line() 画线函数功能: 函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。 用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。 此函数相应的头文件为graphics.h 返回值: 无 (4)lineto() 画线函数功能: 函数lineto()使用当前绘图色、线型及线宽,从当前位置画一直线到指定位置。 用法: 此函数调用方式为void lineto(int x,int y); 说明: 参数x,y为指定点的坐标,函数调用后,当前位置改变到指定点(x,y)。 该函数对应的头文件为graphics.h 返回值: 无 (5)linerel() 相对画线函数功能: 函数linerel() 使用当前绘图色、线型及线宽,从当前位置开始,按指定的水平和垂直偏移距离画一直线。 用法: 这个函数调用方式为void linerel(int dx,int dy); 说明: 参数dx,dy分别是水平偏移距离和垂直偏移距离。 函数调用后,当前位置变为增加偏移距离后的位置,例如,原来的位置是(8,6),调用函数linerel(10,18)后,当前位置为(18,24)。 返回值:无 (6)setlinestyle() 设置线型函数功能: setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。 用法: setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int wigth); 说明: 参数style为线型取值,也可以用相应名称表示。 参数pattern用于自定义线图样,它是16位(bit)字,只有当style=userbit_line(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0xffff,则画实线;pattern=0x9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0xff00和0xf00f,当style不为userbit_line值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。 若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。 这个函数的头文件是graphics.h 返回值: 无 (7)getlinesettings() 获取线型设置函数功能: 函数getlinesettings() 用当前设置的线型、线图样和线宽填 写linesettingstype型结构。 用法: 函数调用方式为void getlinesettings(struct linesettingstype *info); 说明: 此函数调用执行后,当前的线型、线图样和线宽值被装入info指向的结构里,从而可从该结构中获得线型设置。 linesettingstype型结构定义如下: struct linesettingstype int linestyle; unsigned upattern; int thickness; ; 其中linestyle用于存放线型,线型值为中的各值之一。 upattern用为装入用户自定义线图样,这是16位字,每一位等于一个像素,如果哪个位被设置,那么该像素打开,否则关闭。 thickness为线宽值存放的变量。getlinesettings()函数对应的头文件为graphics.h 返回值: 返回的线型设置存放在info指向的结构中。 (8)setwritemode() 设置画线模式函数功能: 函数setwritemode() 设置画线模式 用法: 函数调用方式为 void setwritemode()(int mode); 说明: 参数mode只有两个取值0和1,若mode为0,则新画的线将覆盖屏幕上原有的图形,此为缺省画线输出模式。如果mode为1,那么新画的像素点与原有图形的像素点先进行异或(xor)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。调用setwritemode()设置的画线输出模式只影响函数line(),lineto(),linerel(),recangle()和drawpoly()。 setwritemode()函数对应的头文件是graphics.h 返回值: 无 (9)rectangle() 画矩形函数功能: 函数rectangle() 用当前绘图色、线型及线宽,画一个给定左上角与右下角的矩形(正方形或长方形)。 用法: 此函数调用方式为void rectangle(int left,int top,int right,int bottom); 说明: 参数left,top是左上角点坐标,right,bottom是右下角点坐标。如果有一个以上角点不在当前图形视口内,且裁剪标志clip设置的是真(1),那么调用该函数后,只有在图形视口内的矩形部分才被画出。 这个函数对应的头文件为graphics.h 返回值: 无 (10)函数bar()画条函数功能: 函数bar()用当前填充图样和填充色(注意不是给图色)画出一个指定上左上角与右下角的实心长条形(长方块或正方块),但没有四条边线)。 用法: bar()函数调用方式为void bar(int left,int top,int right,int bottom); 说明: 参数left,topright,bottom分别为左上角坐标与右下角坐标,它们和调用函数rectangle()的情形相同,调用此函数前,可用setfillstyle()或setfillpattern()设置当前填充图样和填充色。 注意此函数只画没有边线的条形,如果要画有边线的的条形,可调用下面的函数bar3d()来画,并将深度参数设为0,同时topflag参数要设置为真,否则该条形无顶边线。 这 应的头文件为graphics.h 返回值: 无 (11)bar3d() 画条块函数功能: 函数bar3d() 使用当前绘图色、线型及线宽画出三维长方形条块,并用当前填充图样和填 充色填充该三维条块的表面。 用法: 此函数调用方式为void bar3d(int left,int top,int right,int bottom,int depth,int topflag); 说明: 参数left,top,right,bottom分另为左上角与右下角坐标,这与bar()函数中的一样。参数depth为条块的深度,以像素为单位,通常按宽度的四分之一计算。深度方向通过屏显纵横比调节为约45度(即这时x/y比设置为1:1)。 参数topflag相当于一个布尔参数,如果设置为1(真)那么条块上放一顶面;若设置为0(假),则三维条形就没有顶面,这样可使多个三维条形叠加在一起。 要使图形更加美观,可利用函数floodfill()或setfillpattern()来选择填充图样和填充色。 bar3d()函数对应的头文件为graphics.h 返回值: 无 (12)drawpoly() 画多边形函数功能: 函数drawpoly() 用当前绘图色、线型及线宽,画一个给定若干点所定义的多边形。 用法: 此函数调用方式为void drawpoly(int pnumber,int *points); 说明: 参数pnumber为多边形的顶点数;参数points指向整型数组,该数组中是多边形所有顶点(x,y)坐标值,即一系列整数对,x坐标值在前。显然整型数组的维数至少为顶点数的2倍,在定义了多边形所有顶点的数组polypoints时,顶点数目可通过计算sizeof(polypoints)除以2倍的sizeof(int)得到,这里除以2倍的原因是每个顶点有两个整数坐标值。另外有一点要注意,画一个n个顶点的闭合图形,顶点数必须等于n+1,并且最后一点(第n+1)点坐标必须等于第一点的坐标。 drawpoly()函数对应的头文件为grpahics.h 返回值: 无 (13)getaspectratio()获取纵横比函数功能: 函数getaspectratio()返回x方向和y方向的比例系数,用这两个整型值可计算某一特定屏显的纵横比。 用法: 此函数调用方式为void getaspectratio(int xasp,int yasp); 说明: 参数xasp指向的变量存放返回的x方向比例系数;参数yasp指向的变量存放返回的y方向比例系数。通常y方向比例系数为10 000, x方向比例系数不大于10 000(这是因为大多数屏幕像素高比宽长)。 注意:纵横比自动用作下面函数arc(),circle()和pieslice()中的标尺因子,使屏幕上圆或弧正常显示。但用ellipse()函数画椭圆必须调用本函数获取纵横比作为标尺因子,否则不予调整。纵横比可用于其它几何图形,目的是校正和显示图形。 getaspectratio()函数对应的头文件为graphics.h 返回值: 返回x与y方向比例系数分别存放在xasp和yasp所指向的变量中。 (14)circle()画圆函数功能: 函数circle()使用当前绘图色并以实线画一个完整的圆。 用法:该函数调用方式为void circle(int x,int y,int radius); 说明: 参数x,y为圆心坐标,radius为圆半径,用像素个素表示。注意:调用circle()函数画圆时不用当前线型。 不同于ellipse()函数,只用单个半径radius参数调用circle()函数,故屏显纵横比可以自动调节,以产生正确的显示图。 此函数对应的头文件为graphics.h 返回值: 无 (15)arc() 画圆弧函数功能: 函数arc()使用当前绘图色并以实线画一圆弧。 用法: 函数调用方式为void arc(int x,int y,int startangle,int endangle,int radius); 说明: 参数x,y为圆心坐标,startangle与endangle分别为起始角与终止角,radius为半径。圆心坐标和半径以像素个数给出,起始角和终止角以度为单位,0度位于右边,90度位于顶部,180度位于左边,底部是270度。同往常一样,360度与0度重合。角度按逆时针方向增加,但并不要求终止角一定比起始角大。例如指定300度和90度分别为起始角和终止角,与指定300度和450度分别为起始角和终止角可画出相同的弧。大于360度可作为参数,它将被化到0度360度范围里。函数arc()能画封闭圆,只要取起始角为0度,终止角为360度即可。此函数中,屏显纵横比可自动调节。 arc()函数对应的头文件为graphics.h 返回值: 无2.2 conio.hconio.h不是c标准库中的头文件,在c standard library,iso c 和posix标准中均没有定义。 conio是console input/output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 大部分dos,windows 3.x,phar lap,dosx,os/2 or win32平台上的c编译器提供此文件,unix 和linux平台的c编译器通常不包含此头文件。2.3 sleep()函数函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds);3 系统设计3.1需求分析3.1.1功能需求应用c语言的图形数据包graphics.h中相关函数,首先绘制一个花瓣逐渐(间隔0.5秒)开放的花朵;然后依次绘制第二朵、第三朵、,直至绘制出一束花朵后停止3.1.2 编程环境vc+6.0(带有easyx插件)3.2功能简述3.2.1 initgraph()函数名: initgraph() 功 能: 初始化图形系统 函数原型: void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver);graphdriver是上涨指向图形驱动序号变量的指针;graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针。pathtodriver表示存放图形驱动文件的路径。 3.2.2 initgraph()函数名: initgraph()功 能:该函数用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。 返回值:原背景色的colorref值。3.2.3 cleardevice()函数名: cleardevice 功 能: 清除图形屏幕 返回值:无。3.2.4 main()r=d*(1+1/48*sin(24*i)*(1+sin(3*i); /*设置花朵半径,使其呈周期性变化。其中1/48用来改变半径变化幅度,24与3用来改变变化周期*/x=r*cos(0.3*i+pi/60); /*设置连线坐标x轴的变化,呈周期性变化。其中0.3改变周期,pi/60改变初始位置*/y=r*sin(0.3*i+pi/60); /*设置连线坐标y轴的变化,呈周期性变化。其中0.3改变周期,pi/60改变初始位置*/4 功能实现总结与体会:总结:本次的学年设计我们组题目是基于c语言的花朵绘制(用graphics.h函数),主要是用c语言编写一个程序使其在计算机显示出不同的花瓣,最后出现一束漂亮的花。由于我们之前没有接触过graphics.h函数。于是我们就从网上、相关书籍找到相应知识,对graphics.h函数进行学习和运用,并在老师的指导下,我们最终很好的完成了本次的学年设计!学年设计最大的一个问题就是程序,如何编写一个简单而又实用的程序是一个挑战。因为我们不知道在编写程序的过程中会遇到什么样的问题,所以在编写程序之前我们已经做了还算很充分得准备,但尽管如此,我们在编写程序以及运行程序的过程中还是遇到了很多棘手的问题。首先是这个程序中要用到很多之前我们没有了解过的有关绘图的函数,我们必须要先熟悉了解这些函数的特性,然后才能对其加以运用。然而在理解这些函数过程中,并没有想象的那么顺利,也出现了很多问题,不过在老师的帮助下,还有我们通过网络的学习,总算对这些函数有了深刻的了解,并可以进行熟练地运用,通过这些我们才能在编程的道路上走得很顺利。不过除了我们不了解的函数外,仍有一些不大不小的问题困扰着我们。有一些明显的程序错误,不过仍有一些语法上的错误。针对这些问题,我们对程序进行了反复的修改,然后运行,再修改,在运行。就这样,经过我们不断的实验,一个完整的程序算编写出来了。不过由于我们的程序比较简短,我们又对其进行了一些简单的修改,使其看起来不那么短小,并且实现的功能又有些增加。 体会:一周的时间很快就这样过去了,作为c语言graphics.h库函数初学者的我们,在一周的时间内完成基于c语言的花朵绘制的开发、设计并实现相应的要求。对于这个结果,我们组的每个成员都非常开心,因为我们都对此次设计做出了一些贡献,我们享受开心团队合作的快乐,在设计过程中我们有过分歧,做过讨论,请教过老师,不过最终我们统一了意见,共同努力,很好的完成了老师给我们的题目。俗话说“三个臭皮匠,顶个诸葛亮”,这就是团队的力量!尽管这次的课程设计的内容我们在书本上没有学过太多,但是我们每个人都抱有很认真的学习态度。对我们来说,完成老师给定的任务固然很重要,但我个人认为我们学习的过程更加重要。现在觉得自己掌握的c语言知识比课堂上学到的多很多,同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家具呆滞品管理制度
- 库房配货员管理制度
- 待寝室安全管理制度
- 德克士公司管理制度
- 志愿积分制管理制度
- 快递站卫生管理制度
- 急救车药品管理制度
- 总经办卫生管理制度
- 意大利药店管理制度
- 成品库抽样管理制度
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)宣传海报
- 2024年全国导游资格考试《导游业务》考试真题及参考答案
- 2024年中国技工院校在校学生人数、招生人数、毕业生人数及发展趋势分析
- 2025年中国配音行业市场现状、发展概况、未来前景分析报告
- 苏炳添人物介绍运动体育介绍人物经历流线历程动画精美课件
- 2024年下半年南昌财政局事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 《棉铃虫的习性》课件
- 售后延保合同范例
- 大学生创新创业教育(2023秋学期)学习通超星期末考试答案章节答案2024年
- 通信工程建设标准强制性条文汇编(2023版)-定额质监中心
- 中建2024装配式建筑+铝模一体化施工技术手册
评论
0/150
提交评论