1、计 算 机 图 形 学 课程实验 报 告实验题目 利用 C 语言图形函数绘图 班 级 姓 名 学 号 指导教师 日 期 西安理工大学理学院应用数学系二零一一年春季学期信息与计算科学专业基础课Computer Graphics Report Of course experiment -图形学课程实验报告- - 1 -实验说明试验目的: 掌握 TurboC 语言图形函数的使用和学会绘制一般图形。试验地点: 教九楼 401 数学系机房实验要求(Direction ):1. 每个学生单独完成;2.开发语言为 TurboC 或 C+,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每
2、次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。实验内容实验题一1.1 实验题目用如下图 1 所示,图中最大正 n 边形的外接圆半径为 R,旋转该正 n 边形,每次旋转 角度,旋转后的的 n 边形顶点落在前一个正六边形的边上,共旋转 N 次,请上机编程绘制 N+1 个外接圆半径逐渐缩小且旋转的正 n 边形。要求: (1) n、R、N 、要求可以人为自由控制输入;(2)N+1 个正六边形的中心( 即外接圆的圆心 )在显示屏幕中心。CBAR1R210图 11.2 实验目的和意义1. 了解如何利用 C 语
3、言和图形函数进行绘图,同时熟练掌握 C+图形绘制环境;2. 掌握 C 语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数;3. 通过对 Turbo C 进行图形程序设计的基本方法的学习,能绘制出简单的图形;利用 C 语言图形函数绘图实验 1如左图(一)所示:n=6=100、N =1、R=R1、旋转一次。依次类推,共旋转 N次。-图形学课程实验报告- - 2 -4. 通过绘制 N+1 个正 n 边形,了解图形系统初始化、图形系统关闭和图形模式的控制,并熟练运用图形坐标的设置,包括定点、读取光标、读取 x 和 y 轴的最大值以及图形颜色的设置。1.3 程序制作步骤(包括算法思想、算法流程图
4、等)算法思想: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
5、+1/(k+1)k=360/(n*d) (n 为多边形的边数,d 为多边形旋转的度数)然后与第二步相同,利用划线函数 line(),连接形成又一个旋转过的正多边形,这样就形成了所要绘制的图形;4.关闭图形系统。1.4 主程序程序代码:/*- 多边形的逐次旋转-*/#include “stdio.h“#include “conio.h“#include “math.h“#include “graphics.h“#include “stdlib.h“#include “time.h“void main()int graphdriver=DETECT,graphmode; /*自动搜索显示器类型和显
6、示模式*/int r;-图形学课程实验报告- - 3 -int i,j,n,k,d;float x,y,q;int a100,b100;char str180,str280;printf(“请输入正接圆的半径 r:n“);scanf(“%d“,printf(“请输入多边形的边数 n:n“);scanf(“%d“,printf(“请输入多边形的个数 k:n“);scanf(“%d“,printf(“请输入每次的旋转角度 d:n“);scanf(“%d“,initgraph( /*初始化图形系统*/printf(“nt 注意:maxx=%d,maxy=%dn“,getmaxx(),getmaxy(
7、);printf(“ntr=%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*3.1415926/180; /*将角增量化为弧度*/for(i=1;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
8、-1,200,w,COPY_PUT);line(2,327,562,327);delay(10); /自行车行驶动画的实现 for(i=0;i10;i+) pieslice(37,290,start,end,37);-图形学课程实验报告- - 13 -pieslice(175,290,start,end,37);start+=40;end+=40; /处于静止状态的自行车车轮的轴线的绘制getch();restorecrtmode();closegraph();3.5 运行结果图参考文献【1】王汝传,黄海平,林巧民计算机图形学教程(第二版) 北京:人民邮电出版社,2009 -图形学课程实验报告- - 14 -【2】谭浩强C 语言程序设计北京:清华大学出版社,1999