图形学实验报告.docx
- 文档编号:1151120
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:20
- 大小:111.13KB
图形学实验报告.docx
《图形学实验报告.docx》由会员分享,可在线阅读,更多相关《图形学实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
图形学实验报告
山东建筑大学测绘地理信息学院
实验报告
(2016—2017学年第一学期)
课程:
计算机图形学专业:
地理信息科学
班级:
地信141
学生姓名:
王俊凝
学号:
20140113010
实验一直线生成算法设计
一、实验目的
掌握基本图形元素直线的生成算法,利用编程语言C分别实现直线和
圆的绘制算法。
二、实验任务
在TurboC环境下开发出绘制直线和圆的程序
三、实验仪器设备
计算机。
四、实验方法与步骤
1运行TurboC编程环境。
2编写Bresenham直线绘制算法的函数并进行测试。
3编写中点圆绘制算法的函数并进行测试。
4增加函数参数,实现直线颜色的设置。
提示:
1.编程时可分别针对直线和圆的绘制算法,设计相应的函数,例如
voiddrawline(…)和voiddrawcircle(…),直线的两个端点可作为drawline的参数,圆的圆心和半径可作为drawcircle的参数。
2.使用C语言编写一个结构体类型用来表示一个点,结构体由两个成
员构成,x和y。
这样,在向函数传入参数时,可使用两个点类型来传参。
定义方法为:
typedefstruct{
int兀
inty;
}pt2;
此处,pt2就是定义的一个新的结构体数据类型,之后就可用pt2来定
义其他变量,具体用法见程序模板。
3.在main函数中,分别调用以上函数,并传入不同的参数,实现对直线的绘制。
4.线的颜色也可作为参数传入,参数可采用TurboC®言中的预设颜色值,具体参见TurboC图形函数。
五、注意事项
1代码要求正确运行,直线和圆的位置应当为参数,实现可配置。
2程序提交.c源文件,函数前和关键代码中增加注释。
程序模板
#include
#include
intx;
inty;
}pt2;
/*declareyourdrawingfunctions.*/
voiddrawline(pt2startpt,pt2endpt,intcolor);
voiddrawcircle(pt2centerpt,intradius,intcolor);
voidcirclePlotPoints(pt2centerpt,intx,inty,intcolor);
intmain()
intcolor,radius;
pt2startpt,endpt,centerpt;
/*initializegraphicsdriver.*/
intgdriver=VGA;
intgmode=VGAHI;
initgraph(&gdriver,&gmode,"C:
\\TC20\\BGI");
/*startdrawing.*/
printf("Pressentertostartdrawing.");getchar();
/*invokeyourdrawingfunctionsonebyone.*/startpt.x=10;
startpt.y=10;
endpt.x=300;
endpt.y=250;
color=4;
drawline(startpt,endpt,color);
centerpt.x=200;
centerpt.y=180;
radius=145;
color=8;
drawcircle(centerpt,radius,color);
/*enddrawing.*/
printf("Drawingisdone,pressentertoexit.");
getchar();
/*closegraphicsdriver.*/
closegraph();
}
/*
*drawline
*startpt:
thestartpointoftheline
*endpt:
theendpointoftheline
*color:
thecoloroftheline
*/
voiddrawline(pt2startpt,pt2endpt,intcolor)
{
intdx=abs(startpt.x-endpt.x),dy=abs(startpt.y-endpt.y);
intp=2*dy-dx;
inttwoDy=2*dy,twoDyDx=2*(dy-dx);
intx,y,xEnd;
if(startpt.x>endpt.x){
x=endpt.x;
y=endpt.y;
xEnd=startpt.x;
}
else{
x=startpt.x;
y=startpt.y;
xEnd=endpt.x;
}
putpixel(x,y,color);
while(x x++; if(P<0) p+=twoDy; else{ y++; p+=twoDyDx; } putpixel(x,y,color); } } /* *drawcircle *centerpt: thecenterofthecircle *radius: theradiusofthecircle *color: thecolorofthecircle */ voiddrawcircle(pt2centerpt,intradius,intcolor) { intx=0; inty=radius; intp=1-radius; circlePlotPoints(centerpt,x,y,color); while(x x++; if(p<0) p+=2*x+1; else{ y--;p+=2*(x-y)+1; } circlePlotPoints(centerpt,x,y,color); } } voidcirclePlotPoints(pt2centerpt,intx,inty,intcolor){ putpixel(centerpt.x+x,centerpt.y+y,color); putpixel(centerpt.x-x,centerpt.y+y,color); putpixel(centerpt.x+x,centerpt.y-y,color); putpixel(centerpt.x-x,centerpt.y-y,color); putpixel(centerpt.x+y,centerpt.y+x,color); putpixel(centerpt.x-y,centerpt.y+x,color); putpixel(centerpt.x+y,centerpt.y-x,color);putpixel(centerpt.x-y,centerpt.y-x,color); } 运行结果 实验二多边形区域填充算法设计 一、实验目的 掌握多边形图形元素的填充算法,利用编程语言C实现多边形的区域 填充算法。 二、实验任务 在TurboC环境下开发出多边形区域填充的程序。 三、实验仪器设备 计算机。 四、实验方法与步骤 1运行TurboC编程环境。 2编写基于四连通区域的种子填充算法。 3编写基于八连通区域的种子填充算法。 4对填充函数进行测试。 提示: 1.编程中需要使用数据结构中的栈,可利用C语言线编写一个对应的数据结构,然后在填充函数中进行使用。 以下过程是对四连通区域填充过程的分解,可作为算法实现的参考。 2.可将两种填充算法分别设计一个函数,例如RegionFill4(…)、 RegionFill8(…),函数中间是作为参数输入的区域。 3.区域的表示可以采用一维数组形式,数组类型是点类型(实验一中定义的结构体),依次将构成多边形的每个顶点的坐标创建点变量,并保存到一个一维数组中进行参数传递。 4.在main函数中来生成一定的区域,并生成表示区域的一维数组,然后通过调用填充算法函数,完成区域填充。 #inelude #include voidboundaryFill4(intx,inty,intfill,intboundary){ intcurrent; current=getpixel(x,y); if((current! =boundary)&&(current! =fill)){ putpixel(x,y,fill); boundaryFill4(x+1,y,fill,boundary); boundaryFill4(x-1,y,fill,boundary); boundaryFill4(x,y+1,fill,boundary); boundaryFill4(x,y-1,fill,boundary); } } intmain() { /*initializegraphicsdriver.*/ intgdriver=VGA; intgmode=VGAHI; initgraph(&gdriver,&gmode,"C: \\TC20\\BGI"); moveto(0,0); } 运行结果 lineto(120,100); lineto(50,80); lineto(0,0); boundaryFill4(50,78,2,15); /*enddrawing.*/ printf("Drawingisdone,pressentertoexit."); getchar(); /*closegraphicsdriver.*/closegraph(); 五、注意事项 1代码要求正确运行,填充颜色设置为函数的参数,实现可配置 2程序提交.c源文件,函数前和关键代码中增加注释。 实验三图形变换算法设计 一、实验目的 掌握图形变换的类型和算法,利用编程语言C,实现二维图形的平移、缩放、旋转和仿射变换算法。 二、实验任务 在TurboC环境下开发出二维图形的平移、缩放、旋转和仿射变换算法。 三、实验仪器设备 计算机。 四、实验方法与步骤 1运行TurboC编程环境。 2编写二维图形的平移算法。 3编写二维图形的固定缩放算法。 4编写二维图形的固定点旋转算法。 5编写二维图形的固定点缩放算法。 6编写二维图形的复合变换算法,实现图形的平移、旋转和缩放算法。 7编写二维图形的仿射变换算法。 提示: 1.针对每种变换算法,编写一个函数,并设计相应的参数。 参数可以 使用实验一编写的点类型来构造。 2.为更好地体现变换效果,在试验一编写的直线绘制算法基础上,再编写一个绘制多边形的算法函数,该函数只是将传入的多边形顶点依次进行直线绘制即可完成。 2.在main函数中,通过组合调用以上函数,实现对二维多边形图形的几何变换。 查看方法可以设定为: 首先调用多边形绘制算法函数,生成初始图形,然后通过调用变换函数,得到变换后的起点和终点坐标,最后再调用多边形绘制算法,查看变换后的图形样式。 3.为使图形比较更为明显,可在多边形绘制参数中增加颜色值,并分别以不同颜色绘制变换前、后的多边形。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)