预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共29页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

ComputerGraphics ReportOfcourseexperiment 信息与计算科学专业基础课 计算机图形学课程实验报告 实验题目设计算法绘制直线与圆 班级 姓名 学号 指导教师 日期 实验2 设计算法绘制直线与圆 实验说明 试验目的:掌握直线和圆的基本生成算法思想,并上机编程实现相应的算法。 试验地点:教九楼401数学系机房 实验要求(Direction):1.每个学生单独完成;2.开发语言为TurboC或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5.自己保留一份可执行程序,考试前统一检查和上交。 实验内容 实验题一 1.1实验题目 1).用DDA法在屏幕上画一条具有三个像素宽的直线段L1。要求:(1)直线段L1的两个端点坐标和画线颜色都要求可以随机输入;(2)要求输出直线段L1上的各点坐标;(3)画出直线的同时要求标明两端点坐标。 2).将课堂所讲的斜率0<K<1的中点画线算法推广到斜率K>1、-1<K<0和K<-1的情况,编写一通用的中点画线算法。 1.2实验目的和意义 1.了解如何利用C语言和图形函数进行绘图; 2.熟悉并掌握C语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数; 3.通过对TurboC进行图形程序设计的基本方法的学习,能绘制出简单的图形; 4.熟悉并掌握DDA法在屏幕上画一条具有三个像素宽的直线段L1以及通用的中点画线算法。通过DDA法及用的中点画线算法,了解图形系统初始化、图形系统关闭和图形模式的控制,并熟练运用图形坐标的设置,包括定点、读取光标以及图形颜色的设置。 1.3程序制作步骤(包括算法思想、算法流程图等) 1.自动搜索显示器类型和显示模式,初始化图形系统,通过printf、scanf语句控制线段的端点坐标和画线颜色的自由输入; 2.DDAline:设直线之起点为(x1,y1),终点为(x2,y2),则斜率k为: 则有: ⑴.可通过计算由x方向的增量引起y的改变生成直线。由(为直线上某步的初值)则 ⑵.也可通过计算由y方向的增量引起x的改变生成直线。由(为直线上某步的初值)则: 3.Midpointline: ⑴.假定X坐标为的各像素点中,与直线最近点已确定为(用实心小圆表示),那么下一个与直线最近的象素点只能是正右方的或右上方两者之一。 ⑵.再以M表示P1与P2的中点,即又设Q是理想直线与垂直线的交点。显然有: ①.当M在Q的下方,则P2离直线近,应取为下一个象素点; ②.当M在Q的上方,则P1离直线近,应取为下一个象素点。 ③.当M和Q重合,则P1和P2离直线一样近,两者均可取为下一个象素点 1.4主程序 1.4.1DDA算法 #include"graphics.h" #include<stdlib.h> #include<stdio.h> #include<conio.h> #include<math.h> DDAline(intx1,inty1,intx2,inty2,intc) { floatdelta_x=0; floatdelta_y=0; floatx=0; floaty=0; intdx=0; intdy=0; intsteps=0; intk=0; dx=x2-x1; dy=y2-y1; if(abs(dx)>abs(dy)) { steps=3*abs(dx); } else { steps=3*abs(dy); } delta_x=(float)dx/(float)steps; delta_y=(float)dy/(float)steps; x=float(x1); y=float(y1); for(k=1;k<=steps;k++) { putpixel(int(x+0.5),int(y+0.5),c); x+=delta_x; y+=delta_y; } return0; } voidmain() { chart[100]={0}; intx1=0; inty1=0; intx2=0; inty2=0; intc=0; voiddda_line(intx1,inty1,intx2,inty2,intc); intgraphdriver=DETECT,graphmode; initgraph(&graphdriver,&graphmode,"D:\\TC");/*初始化图形系统*/ printf("输入两端点坐标:\n"); scanf("<%d,%d>,<%d,%d>",&x1,&y1,&x2,&y2