计算机图形学利用C语言图形函数绘图

上传人:y****n 文档编号:103014078 上传时间:2022-06-08 格式:DOC 页数:15 大小:265.51KB
返回 下载 相关 举报
计算机图形学利用C语言图形函数绘图_第1页
第1页 / 共15页
计算机图形学利用C语言图形函数绘图_第2页
第2页 / 共15页
计算机图形学利用C语言图形函数绘图_第3页
第3页 / 共15页
点击查看更多>>
资源描述
Computer Graphics Report Of course experiment 计算机图形学课程实验 报 告实验题目 利用C语言图形函数绘图 班 级 姓 名 学 号 指导教师 日 期 利用C语言图形函数绘图实验1实验说明试验目的: 掌握TurboC语言图形函数的使用和学会绘制一般图形。试验地点: 教九楼401 数学系机房实验要求(Direction):1. 每个学生单独完成;2.开发语言为TurboC或C+,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。实验内容:实验题一1.1实验题目用如下图1所示,图中最大正n边形的外接圆半径为R,旋转该正n边形,每次旋转角度,旋转后的的n边形顶点落在前一个正六边形的边上,共旋转N次,请上机编程绘制N+1个外接圆半径逐渐缩小且旋转的正n边形。要求:(1) n、R、N、要求可以人为自由控制输入;(2)N+1个正六边形的中心(即外接圆的圆心)在显示屏幕中心。如左图(一)所示:n=6=100、N =1、R=R1、旋转一次。依次类推,共旋转N次。CBAR1R2图11.2实验目的和意义1. 了解如何利用C语言和图形函数进行绘图;2. 熟悉并掌握C语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数;3.通过对Turbo C进行图形程序设计的基本方法的学习,能绘制出简单的图形;4. 通过绘制N+1个正n边形,了解图形系统初始化、图形系统关闭和图形模式的控制并熟练运用图形坐标的设置,包括定点、读取光标、读取x和y轴的最大值以及图形颜色的设置。1.3程序制作步骤(包括算法思想、算法流程图等)1.自动搜索显示器类型和显示模式,初始化图形系统,通过printf、scanf语句控制半径r、边数n、多边形的个数k、边的每次旋转角度d,的自由输入;2.给定一内接圆半径r,由圆内接多边形的算法公式:xi=r*cos(i+1) *2.0*pi/n)+320.0 yi=240.0-r*sin(2.0*pi/n *(i+1) 确定出多边形N的各个顶点坐标,然后利用划线函数line(),连接相邻两点,即形成一个正多边形。3.根据边与角的关系,以及线段定比分点公式,可知旋转后的多边形的各个顶点的坐标 。公式如下: xi=(xi+xi+1/(k+1) y i=(yi+yi+1/(k+1) k=360/(n*d) (n为多边形的边数,d为多边形旋转的度数) 然后与第二步相同,利用划线函数line(),连接形成又一个旋转过的正多边形,这样就形成了所要绘制的图形;4.关闭图形系统。1.4主程序/*- 多边形的逐次旋转-*/#include #include conio.h#include math.h#include #include stdlib.h#include time.h#define pi 3.1415926#define ARRAY_LEN 128void main() int graphdriver = DETECT,graphmode; /*自动搜索显示器类型和显示模式*/ int r = 0; int i = 0; int j = 0; int n = 0; int k = 0; int d = 0; float x = 0; float y = 0; float q = 0; int aARRAY_LEN = 0; int bARRAY_LEN = 0; char str1ARRAY_LEN = 0; char str2ARRAY_LEN = 0; printf(请输入正接圆的半径r:); scanf(%d,&r); printf(n请输入多边形的边数n:); scanf(%d,&n); printf(n请输入多边形的个数k:); scanf(%d,&k); printf(n请输入每次的旋转角度d:); scanf(%d,&d); initgraph(&graphdriver,&graphmode,D:TC); /*初始化图形系统*/ printf(nn 注意:maxx=%d,maxy=%dn,getmaxx(),getmaxy(); printf(n r=%d, n=%d, k=%d, d=%d,r,n,k,d); x = (getmaxx()+1)/2.0; y = (getmaxy()+1)/2.0; q = 360/n; /*角增量*/ q = q*pi/180; /*将角增量化为弧度*/ for(i=0;in;+i) /*计算初始正n角形顶点坐标*/ ai+1=(int)(int)x+r*cos(i)*q); bi+1=(int)(int)y-r*sin(i)*q); an+1=a1; bn+1=b1; /*闭合正n角形,以便连续画线*/ /*-画k个正多角形-*/ for(i=1;ik+1;+i) for(j=1;jn+1;+j) /*画一个正多角形*/ line(aj,bj,aj+1,bj+1); for(j=1;jn+1;+j) /*计算下一个正多边形顶点坐标*/ aj=(int)(aj+(aj+1-aj)/d); bj=(int)(bj+(bj+1-bj)/d); an+1=a1; bn+1=b1; getch(); printf(nn); closegraph(); 1.5运行结果图图1.5.1输入n边形信息运行结果截图图1.5.2 n边形运行结果截图:实验题二2.1实验题目请绘制一个图:屏幕中央有一个半径为R1=160的大圆和一个同心的且半径为R2=120的小圆,同时在大圆和小圆中间均匀分布着12个与大圆和小圆相切的圆。如下图2所示:要求:(1) 分别用12种不同的颜色和填充模式填充12个小圆;(2)用自定义模式填充中间小圆,且用漫延填充方法填充;(3) 用自定义模式填充中间小圆时,填充模式图案自己设计。例如,用字母A 、字母B、字母C填充图案可设计为: 2.2实验目的和意义1.会运用画圆函数circle(),图形填充函数包括:setfillstyle()、setfillpattern()以及floodfill()来填充圆;2.学会用自定义模式填充指定圆,并且用漫延填充方法填充;3.学会用自定义图案来填充指定圆。2.3程序制作步骤(包括算法思想、算法流程图等)1.输入所要求环绕的小圆的个数n,设置画笔颜色,利用circle()画半径为160的大圆,然后画半径为120的小圆并按照输入的模式m选择相应的填充模式。2.利用圆内接多边形的算法,算出环绕小圆的各个圆心坐标,公式如下: xi=r*cos( (i+1) * 2.0*pi/n)+200.0 yi=200.0-r*sin( (i+1) * 2.0*pi/n) 以20为半径画环绕的n个小圆,并用不同的颜色填充。 2.4主程序 #include stdio.h#include conio.h#include math.h#include graphics.h#define pi 3.14159265#define ARRAY_LEN 50void main()int graphdriver=DETECT,graphmode; /*自动搜索显示器类型和显示模式*/double xARRAY_LEN = 0;double yARRAY_LEN = 0;int i = 0;int j = 0;/循环变量int n = 0;/圆的个数double r = 0;/半径double theta = 0;/角度double sin(double);double cos(double);char p18=(char)0x00,(char)0x3c,(char)0x20,(char)0x20, (char)0x38,(char)0x20,(char)0x20,(char)0x20;/填充F r=160.0;printf(请输入圆的个数:);scanf(%d,&n);initgraph(&graphdriver,&graphmode,D:TC); /*初始化图形系统*/theta=2.0*pi/n;/计算角度setcolor(3);circle(200,200,200);setcolor(6);setfillstyle(12,0);setfillpattern(p1,9);circle(200,200,120);/画圆floodfill(200,200,6);while(!kbhit()for(j=2;j=n;j+)for(i=0;i=n;i+)xi=r*cos(theta*(i+j)+200.0;/计算圆心位置yi=200.0-r*sin(theta*(i+j);setcolor(i);circle(int)xi,(int)yi,(int)40);setfillstyle(SOLID_FILL,i); floodfill(int)xi,(int)yi,i); delay(100);/延迟时间cleardevice();setcolor(3);circle(200,200,200);setcolor(6);setfillstyle(12,0);/设置填充格式 setfillpattern(p1,9); circle(200,200,120); floodfill(200,200,6);/ getch();closegraph();2.5运行结果图图2.5.1圆个数为14时的F填充:实验题三3.1实验题目自选题目:(1)请编写一动画:绘制上述实验2中的图形,并要求: 1.让图案中的12个小圆按顺时针或逆时针方向不停地旋转; 2.半径为R2=120的小圆用黑色和实填充模式填充,并在小圆内绘制一些闪 烁的星星(可参考课本P81 例3.27)。或者用不同的颜色和填充模式不停地填充小圆,产生动画效果。(2)请编写一动画:实现实验1中的图形由大到小(由小到大)旋转的动态过程。(3)编写一个描述一俩自行车在一公路上由左向右行驶的程序,运行效果图大致如图三所示。(可参考课本P74 例3.21)(4)试着自行设计一个动画或美术图案,并且上机编程实现。(5)构造一种类似广告片效果,一幅或者多幅图形图像逐个显示出来,并配以文字说明,颜色变化等。要求:对于实验3中的5个小题,选择其中一个上机编程实现即可。3.2实验目的和意义1. 描述一辆自行车在一公路上由右向左行驶;2. 熟练掌握画圆函数circle(),以及画线函数line(),自定义填充函数setfillstyle()等一些简单的绘图函数。3.3程序制作步骤(包括算法思想、算法流程图等)1.自动搜索显示器类型和显示模式,初始化图形系统并设置背景颜色以及画笔颜色;2.用画圆函数circle()以及画线函数line()绘制自行车的基本轮廓;3.绘制处于运动状态的自行车车轮的轴线以及动态画面;4.绘制最后处于静止状态的自行车车轮的轴线;5.关闭图形系统。3.4主程序#include#includegraphics.h#include#includevoid main()void *w = NULL;int driver=DETECT;int mode=0;int i = 0;int j = 0;int start = 0;int end = 0;initgraph(&driver,&mode, );/初始化图形系统cleardevice();/清除屏幕和图形缓冲区setbkcolor(9);/用指定的颜色值来设置当前的背景色setcolor(13);/设置前景颜色 start=0;end=180;circle(387,290,37);circle(525,290,37);line(404,217,398,230);line(436,217,429,230);line(398,230,429,230);line(413,230,387,290);line(387,290,525,290);line(408,243,484,243);line(387,290,484,243);line(484,243,525,290);line(444,290,484,243);line(444,290,446,279);line(444,290,443,300);line(438,277,444,278);line(435,300,451,301);line(484,243,487,233);line(472,233,502,233); /自行车基本轮廓的绘制w=malloc(imagesize(350,200,562,327);/动态申请空间getimage(350,200,562,327,w);/保存图像函数for(i=350,j=0; i0 ;i-,j-)setfillstyle(EMPTY_FILL,0);/设置填充模式和颜色 pieslice(387+j,290,start,end,37);/绘制并填充一个扇形pieslice(525+j,290,start,end,37);start+=40;end+=40;delay(5); /处于运动状态的自行车车轮的轴线的绘制 putimage(i-1,200,w,COPY_PUT);/输出图像函数line(2,327,562,327);delay(10); /自行车行驶动画的实现 for(i=0;i10;i+)pieslice(37,290,start,end,37);/绘制并填充一个扇形pieslice(175,290,start,end,37);/绘制并填充一个扇形start+=40;end+=40; /处于静止状态的自行车车轮的轴线的绘制getch();restorecrtmode();/将屏幕模式恢复为先前的initgraph设置closegraph();3.5运行结果图图3.5.1自行车在起点图3.5.1自行车在中间图3.5.1自行车在中点参考文献1 王汝传,黄海平,林巧民计算机图形学教程(第二版)北京:人民邮电出版社,20092谭浩强. C语言程序设计M. 北京:清华大学出版社,2005.本次实验总结或体会 通过本次试验我看到了在计算机图形学这门课中有意义的一面,增加了我学习这门课的兴趣;但同时我也认识到了自身在语言掌握中的不足和有待加强的地方;在以后的学习中要更加努力、要多动手、多学习。教师评分
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械制造 > 电气技术


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!