实验报告_4-11.pdf
上传人:sy****28 上传时间:2024-09-11 格式:PDF 页数:9 大小:121KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

实验报告_4-11.pdf

实验报告_4-11.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

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

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

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

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

北京工商大学计算机图形学实验报告试验名称计算机图形学实验成绩实验日期2005年5月日班级微机024班组别交报告日期2005年6月15日学号0214020415姓名欧阳锦林同组学生教师审批签字图形学实验报告--微机024班15号欧阳锦林一、实验目的:通过本实验,使自己了解计算机图形学的有关原理、算法及系统,掌握基本图形显示程序设计方法,及二维和三维图形变换程序设计方法,为进一步学习计算机辅助设计方面的技术知识打下基础。二、实验内容和要求:1、实验内容①直线和圆的生成,设定屏幕图形工作方式,彩色象素的读写,直线和圆的扫描转换。②多边形的裁剪和填充③图形变换:二维变换、及投影、透视变换2、上机实验要求上机实验是巩固课堂内容。增强感性认识。实验后要求学生认真编写实验报告,作为学生平时成绩的依据。三、实验报告:1、实验环境:VStudio6.0的VC6.0,MFC2、实现功能:a)直线和圆的生成,直线和圆的扫描转换。并且实现了用鼠标点击取点的交互功能。b)多边形的裁剪和填充,实现了点扫描与直线扫描多边形。c)直线剪裁,并可以自动判断与某条或某些条直线可剪裁,剪裁结果是一条线段生成两到三条线段,并可在文档中保存。d)图形变换:二维变换:平移、旋转、缩放功能,其中平移已实现了鼠标点击取点的交互功能。e)提供了用户对对象的选择,再在在被选择的对象上进行相应操作。f)顺时针旋转90度、逆时针旋转90度g)放大镜:放大成原来的1.75*1.5倍,是圆则放大1.25倍。对已选中的对象进行的操作。h)缩小镜:缩小到原来的(1/1.75*(1/1.5)倍,是圆则缩小(1/1.25)倍。对已选中的对象进行的操作。i)复制、剪切、粘贴、删除功能都已实现,不过一次只能选择一个对象进行操作。以后我会加shift控制多选,同时也支持多对象操作的。j)实现了文档存储与打开。3、文件格式:1、Graph1.txt文件格式是:第一行表示有3种类形的图元数据,在本程序中为3,分别为直线,圆,多边形,第二行为第一个数据为类型,1表示为直线容器,第二个数据3表示此直线容器(用双链表实现)中有3条直线。下面3行的格式相同,分别是颜色,起点、终点的x、y坐标。第六行中3表示类型3是多边形,2表示多边形个数。再下面就是各个多边形的信息的,0表示不用填充,15550是颜色值,3表示3边形。下面三行是三个顶点的x、y坐标。11-16行信息同理。17行2表示类型2为圆,1表示1个,18行各个数据分别表示,是否填充、颜色、圆心x、y坐标、半径。2、可以直接用记事等不带格式的文本编辑器按文件格式进行手工修改,注意:一定要按格式,否则将不能生成你想要的图元。4、所用数据结构:1、GraphObject:本程序得用一个数据结构把所有的图元装入了,并可以根据不同的类型,做不同的动作,类的定义如下://GraphObject是用来存放各种图形对象的,根据type的不同,//object做不同的类型转换.classGraphObject{private:void*object;inttype;public:GraphObject();GraphObject(void*Object,intType);virtual~GraphObject();//根据type的不同,做不同的动作。boolaction(CDC*pCDC);//根据type的不同,保存不同为格式。boolsave(ofstream&out);};再用CList<GraphObject,GraphObject&>GraphList;容器把所有的对象都装入进去了。当然,后来为了方便,再加了三个容器,这个容器的作用就不大了,可它却体现了大自然的面向对象的基本原理,值得关注。2、Matrix:#definePI3.1415926//3*3矩阵类:classMatrix{public:Matrix();Matrix(constMatrix&mat);Matrix(inttx,intty);Matrix(floattx,floatty);virtual~Matrix();floatarray[3][3];voidSetIdentity();//设置对角为1,其余为0Matrix&operator*(constMatrix&mat);//矩阵乘法.Matrix&operator+(constMatrix&mat);//矩阵加法//将点通过矩阵转换为另一个点.POINT&pointTrans(POINT&point);};3、MidLine: