




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学大作业报告课程名称: 计算机图形学 姓 名: 陶向东 学 号: 100511726 组 员: 任课教师: 贾瑜 成 绩: 1 引言 1.1 编写目的本学期计算机图形学课程期末大作业主要的开发项目就是基于DOS的基本图形的绘制、填充、变换,以及直线的裁剪。实现语言VC+,编辑、调试环境VC+6.0。此次大作业的完成是对计算机图形学基础知识的检验和测试,在撰写报告的过程中我能够更深刻地了解计算机图形学算法的思想,通过这份文档来记录我们在开发此软件的过程中遇到的问题以及改善的方法。现在对整个开发过程加以认识、记录和总结,留下经验,汲取教训。为以后的其他工作留下经验资料,为以后遇到相同的问题和从事类似项目奠定坚实的基础。1.2 任务分工陶向东:实现直线、正三角形、矩形、椭圆的绘制,图形的边界标识填充算法,实现直线的裁剪算法。2 程序框架2.1 程序模块本系统是一个基于DOS开发的实现能够基本图形的绘制、填充、变换,以及直线的裁剪的系统。本系统中的功能模块主要分为以下几种: 基本图形绘制模块:实现直线、矩形、圆、椭圆的绘制功能。基本图形填充模块:实现矩形的填充功能。基本图形裁剪模块:实现直线的裁剪功能。程序框架如图2-1所示。 图2-1 程序框架图2.2 程序功能接口接口名称:void drawLine(int xs,int ys,int xe,int ye,int value);功能说明:实现正负法画直线。参数说明:xs,ys:起点坐标;xe,ye:终点坐标;value:画线颜色。接口名称:void drawCircle(int x0,int y0,int r,int value);功能说明:实现正负法画圆。参数说明:x0,y0:圆心坐标;r:半径;value:画圆颜色接口名称:void drawRectangle(int x0,int y0,int x1,int y1,int value);功能说明:实现画矩形。参数说明:x0,y0:矩形其中一个点的坐标; x1,y1:矩形对角点的坐标;value:画线颜色。接口名称:void drawTriangle(int x0,int y0,int x1,int y1,int x2,int y2,int value);功能说明:实现画三角形。参数说明:x0,y0:三角形第一个点的坐标; x1,y1:三角形第二个点的坐标; x2,y2:三角形第三个点的坐标; value:画线颜色。接口名称:void midellipse(int x,int y,int color);功能说明:实现画椭圆。参数说明:x,y:椭圆中点坐标;color:画线颜色。接口名称:void drawshape();功能说明:画填充图形。参数说明:无。接口名称:void edgemark_fill();功能说明:图形填充。参数说明:无。接口名称:initialize( );功能说明:初始化界面。参数说明:无。接口名称:void encode(int x,int y,int *code)功能说明:给被裁剪图形编码。参数说明:int x:图形位置的横坐标;int y:图形位置的纵坐标;int *code:记录点的位置。接口名称:void draw_ett();功能说明:实现图形裁剪参数说明:无 接口名称:void void chosenum();功能说明:提示选择功能。参数说明:无。接口名称:void CirclePoints(int x0,int y0,int x,int y,int value);功能说明:存储下一个圆上的点。参数说明:x0,y0:第一个点的坐标; x,y:圆点坐标; value:画线颜色。3 主要算法描述3.1 边界标识法填充扫描线具有连贯性,这种连贯性只有在扫描线与多边形相交处才会发生变化,而每次的变化结果:无非是在前景色和背景色之间相互“切换”。边标志填充算法正是基于这一发现,先在屏幕上生成多边形轮廓线,然后逐条扫描处理。处理中:逐点读取象素值,若为边界色,则对该象素值进行颜色切换。1、用边界色画出多边形轮廓线,也就是将多边形边界所经过的象素打上边标志。 2、为了缩小范围,加快填充速度,须找出多边形的最小包围盒:xmin、ymin、xmax、ymax。如下图所示。图3.1.1边标志填充算法3、逐条扫描线进行处理,对每条扫描线依从左往右的顺序,逐个访问该扫描线上的象素。每遇到边界象素,标志取反。然后,按照标志是否为真,决定象素是否为填充色。3.2 正负法画圆现以下图的AB弧为例,来说明正负画圆法(顺时针生成圆)。图3.2.1正负法画圆假设当前点为Pi(xi,yi),取下一个点Pi+1(xi+1,yi+1)的原则是: 1、当F(xi,yi)0时:取xi+1= xi+1,yi+1= yi。即向右走一步,从圆内走向圆外。对应图(a)中的从Pi到Pi+1。2、当F(xi,yi)0时:取xi+1= xi,yi+1= yi-1。即向下走一步,从圆外走向圆内。对应图(b)中的从Pi到Pi+1。由于向圆内或向圆外走取决于F(xi,yi)的正负,因此称为正负法。下面分两种情况求出F(xi,yi)的递推公式:(1) 当F(xi,yi)0时,向右走,取xi+1=xi+1,yi+1=yi,则F(xi+1,yi+1) =F(xi+1,yi)=(xi+1)2+yi2-R2 =(xi2+yi2-R2)+2xi+1 (3.2.1) = F(xi,yi)+2xi+1(2) 当F(xi,yi)0时,向下走,取xi+1=xi,yi+1=yi-1,则F(xi+1,yi+1) =F(xi,yi-1)=xi2+(yi-1)2-R2 =(xi2+yi2-R2)-2yi+1 (3.2.2)= F(xi,yi)-2yi+1初始时,x=0,y=R,故 F(0,R)=(02+R2)-R2=0 (3.2.3)公式(3.2.1)、(3.2.2)和(3.2.3)就构成正负画圆算法的核心。给象素坐标(x,y)及F赋初始值后,进入循环画点;画点后,根据F的符号进行F值的递推和下一个点的获取,直到xy为止。同前面介绍的一样,利用圆的八分对称性,循环一次,画八个点。3.3 Sutherland裁剪算法3.3.1 Sutherland多边形裁剪算法思想该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。多边形通常由它的顶点序列来表示,经过裁剪规则针对某条边界裁剪后,结果形成新的顶点序列,又留待下条边界进行裁剪,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列,才是结果多边形(它可能构成一个或多个多边形)。当多边形一个顶点Pi相对于窗口某条边界及其延长线进行剪裁时,不外乎下列四种情况(即裁剪规则):1、顶点Pi在内侧,前一顶点Pi-1也在内侧,则将Pi纳入新的顶点序列;2、顶点Pi在内侧,前一顶点Pi-1在外侧,则先求交点Q,再将Q、Pi依次纳入新的顶点序列;3、顶点Pi在外侧,前一顶点Pi-1在内侧,则先求交点Q,再将Q纳入新的顶点序列;4、顶点Pi与前一顶点Pi-1均在外侧,则顶点序列中不增加新的顶点。3.3.2 点在边界内侧的判断方法为了判断点是否在边界内侧可用坐标比较法和更通用的向量叉积符号判别法。1、坐标比较法将点的某个方向分量与边界进行比较。例如,判断某点是否在下边界内侧,用条件判别式: if(pi1=ymin) 即可。2、向量叉积法为简单计,测试点表示为P点。假设窗口边界方向为顺时针,如图中所示,对于其中任一边界向量,从向量起点A向终点B看过去:如果被测试点P在该边界线右边(即内侧),ABAP的方向与X-Y平面垂直并指向屏幕里面,即右手坐标系中Z轴的负方向。反过来,如果P在该边界线的左边(即外侧),这时ABAP的方向与X-Y平面垂直并指向屏幕外面,即右手坐标系中Z轴的正方向。设:点P(x,y)、点A(xA,yA)、点B(xB,yB),向量AB=(xB-xA),(yB-yA),向量AP=(x-xA),(y-yA),那么ABAP的方向可由下式的符号来确定:V=(xB-xA)*(y-yA)- (x-xA)*(yB-yA) 因此,当V0时,P在边界线内侧;而V0时,P在边界线外侧。3.3.3 Sutherland多边形裁剪算法特点Sutherland多边形裁剪算法具有一般性,被裁剪多边形可以是任意凸多边形或凹多边形,裁剪窗口不局限于矩形,可以是任意凸多边形。上面的算法是多边形相对窗口的一条边界进行裁剪的实现,对于窗口的每一条边界依次调用该算法程序,并将前一次裁剪的结果多边形作为下一次裁剪时的被裁剪多边形,即可得到完整的多边形裁剪程序。4 运行情况4.1 基本图形绘制模块程序运行主界面如图5-1-1所示。图5-1-1 程序运行主界面直线绘制如图5-1-2所示。图5-1-2 直线绘制圆形绘制如图5-1-3所示。 图5-1-3 圆形绘制矩形绘制如图5-1-4所示图5-1-4 矩形绘制三角形绘制如图5-1-5所示。图5-1-5 三角形绘制椭圆绘制如图5-1-6所示。图5-1-6 椭圆绘制4.2 基本图形填充模块矩形填充如图5-2-1所示。图5-2-1 矩形旋转变换4.3 直线的裁剪模块直线裁剪如图5-3-1所示。图5-3-1 待裁剪直线绘制5 安装说明6.1.1 文件列表说明压缩包里文件列表及对应说明如下:Includegraphics.h 程序需要引用的头文件Lib(VC6)graphics6.libVC6 MBCS 版本库文件graphics6u.lib VC6 Unicode 版本库文件Lib(VC2008)graphics7.libVC6 以上版本 MBCS 版本库文件graphics7u.lib VC6 以上版本 Unicode 版本库文件VcGraphHelp.chm帮助文件6.1.2 安装说明将 Include 和对应的 Lib 文件夹下的文件分别拷贝到 VC 对应的 Include 和 Lib 文件夹内,仅此而已。例如,VC6 需要拷贝 graphics.h、graphics6.lib、graphics6u.lib 三个文件。或者,将几个文件单独放到一个文件夹内,然后修改 VC 中的 Lib 和 Include 路径也可以。总之,就是要让 VC 能找到这几个文件。VC2002/2003/2005 请复制 VC2008 的库文件。6 总结本学期计算机图形学课程期末大作业主要的开发项目就是利用基本绘图算法实现基本图形的绘制、填充、变换,以及直线的裁剪。在完成此次大作业的过程中遇到了许多困难,因为MFC掌握的不是很好,所以我选用了用纯C语言实现图形的绘制、填充和裁剪,因为考虑到turboC使用起来不太方便,于是考虑到将TC下能够运行的程序移植到VC6.0上,这样操作起来就方便多了。经过在网上多番查找资料,才找到了一种方法实现上述功能,将压缩包中的相应文件拷到VC的相应的安装目录下面。因为在VC DOS界面下画图存在一定的局限,所以我只是实现了基本图形的简单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025养老院老年心理咨询服务及精神关爱合同
- 2025年度住宅小区绿化养护及病媒生物防控合作协议
- 城市公共自行车系统2025年智能租赁与骑行安全保障方案
- 文化产业发展专项资金申请项目可持续发展策略报告
- 2025年智能家居互联互通标准下的智能家居产业创新模式报告
- 2025年数字艺术展览虚拟现实场景构建与观众沉浸式体验创新研究策略分析报告
- 麻城高考试卷真题及答案
- 2025年制造业企业产品质量审计与合规性提升顾问服务协议
- 2025年高新技术企业员工劳动合同执行及监督管理协议
- 辽宁沈阳圣大奥特莱斯购物广场招商手册演示
- (完整word)600习题《工会基础知识试题及答案》2020.1.6
- GB 29518-2013柴油发动机氮氧化物还原剂尿素水溶液(AUS 32)
- 第三单元名著导读《儒林外史之严贡生、严监生》课件-部编版语文九年级下册
- 中医药法宣讲余课件
- 2022年郑州城市职业学院辅导员招聘考试笔试试题及答案解析
- 鲁班奖工程复查参考表格
- Q∕SY 17375-2016 钻井液用固体润滑剂石墨类
- 契税补贴申请表
- 临床医学专业八年制培养计划
- 夜的钢琴曲五(原版曲谱标准指法)
- 建筑工程钢筋抽料知识总结
评论
0/150
提交评论