ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:106.20KB ,
资源ID:5071254      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5071254.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Dos界面计算机图形学画图.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Dos界面计算机图形学画图.docx

1、Dos界面计算机图形学画图Dos界面计算机图形学画图计算机图形学大作业报告课程名称: 计算机图形学 姓 名: 陶向东 学 号: 100511726 组 员: 任课教师: 贾瑜 成 绩: 1引言 1.1 编写目的本学期计算机图形学课程期末大作业主要的开发项目就是基于DOS的基本图形的绘制、填充、变换,以及直线的裁剪。实现语言VC+,编辑、调试环境VC+6.0。此次大作业的完成是对计算机图形学基础知识的检验和测试,在撰写报告的过程中我能够更深刻地了解计算机图形学算法的思想,通过这份文档来记录我们在开发此软件的过程中遇到的问题以及改善的方法。现在对整个开发过程加以认识、记录和总结,留下经验,汲取教训

2、。为以后的其他工作留下经验资料,为以后遇到相同的问题和从事类似项目奠定坚实的基础。1.2 任务分工陶向东:实现直线、正三角形、矩形、椭圆的绘制,图形的边界标识填充算法,实现直线的裁剪算法。2 程序框架2.1 程序模块本系统是一个基于DOS开发的实现能够基本图形的绘制、填充、变换,以及直线的裁剪的系统。本系统中的功能模块主要分为以下几种: 基本图形绘制模块:实现直线、矩形、圆、椭圆的绘制功能。基本图形填充模块:实现矩形的填充功能。基本图形裁剪模块:实现直线的裁剪功能。程序框架如图2-1所示。 图2-1 程序框架图2.2程序功能接口接口名称:void drawLine(int xs,int ys,

3、int xe,int ye,int value);功能说明:实现正负法画直线。参数说明:xs,ys:起点坐标;xe,ye:终点坐标;value:画线颜色。接口名称:void midellipse(int x,int y,int color);功能说明:实现画椭圆。参数说明:x,y:椭圆中点坐标;color:画线颜色。接口名称:void drawshape();功能说明:画填充图形。参数说明:无。接口名称:void edgemark_fill();功能说明:图形填充。参数说明:无。接口名称:initialize( );功能说明:初始化界面。参数说明:无。接口名称:void encode(int

4、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边界标识法填

5、充扫描线具有连贯性,这种连贯性只有在扫描线与多边形相交处才会发生变化,而每次的变化结果:无非是在前景色和背景色之间相互“切换”。边标志填充算法正是基于这一发现,先在屏幕上生成多边形轮廓线,然后逐条扫描处理。处理中:逐点读取象素值,若为边界色,则对该象素值进行颜色切换。1、用边界色画出多边形轮廓线,也就是将多边形边界所经过的象素打上边标志。 2、为了缩小范围,加快填充速度,须找出多边形的最小包围盒:xmin、ymin、xmax、ymax。如下图所示。图3.1.1边标志填充算法3、逐条扫描线进行处理,对每条扫描线依从左往右的顺序,逐个访问该扫描线上的象素。每遇到边界象素,标志取反。然后,按照标志是

6、否为真,决定象素是否为填充色。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

7、(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)和

8、(3.2.3)就构成正负画圆算法的核心。给象素坐标(x,y)及F赋初始值后,进入循环画点;画点后,根据F的符号进行F值的递推和下一个点的获取,直到xy为止。同前面介绍的一样,利用圆的八分对称性,循环一次,画八个点。3.3Sutherland裁剪算法3.3.1 Sutherland多边形裁剪算法思想该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。多边形通常由它的顶点序列来表示,经过裁剪规则针对某条边界裁剪后,结果形成新的顶点序列,又留待下条边界进行裁剪,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列,才是结果多边形(它可能构成一个或多个多边形)。当多边形一个顶点Pi相对

9、于窗口某条边界及其延长线进行剪裁时,不外乎下列四种情况(即裁剪规则):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=ym

10、in) 即可。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-

11、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

12、-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 版本库文件L

13、ib(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 能找到这几个文件。VC

14、2002/2003/2005 请复制 VC2008 的库文件。6总结本学期计算机图形学课程期末大作业主要的开发项目就是利用基本绘图算法实现基本图形的绘制、填充、变换,以及直线的裁剪。在完成此次大作业的过程中遇到了许多困难,因为MFC掌握的不是很好,所以我选用了用纯C语言实现图形的绘制、填充和裁剪,因为考虑到turboC使用起来不太方便,于是考虑到将TC下能够运行的程序移植到VC6.0上,这样操作起来就方便多了。经过在网上多番查找资料,才找到了一种方法实现上述功能,将压缩包中的相应文件拷到VC的相应的安装目录下面。因为在VC DOS界面下画图存在一定的局限,所以我只是实现了基本图形的简单绘制,图形的填充和图形裁剪算法。在此次实验过程中我也遇到了很多问题比如说处理TC程序在VC中的兼容性问题,填充算法的堆栈溢出程序崩溃问题。经过查阅大量资料终于解决了上述问题。参考文献:1 张彩明,杨兴强,李学庆等. 计算机图形学M.北京:科学出版社,2008.71-74.2 彭晏飞,刘建辉. 橡皮筋技术在交互式绘图系统中应用J. 辽宁工程技术大学学报,2004, 23(z1):34-35.3 张磊. 基于VC+的高效绘图双缓冲技术J.信息科学,2009(20):61-61.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1