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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

梁友栋Barsky直线裁剪算法计算机图形学课程设计.docx

1、梁友栋Barsky直线裁剪算法计算机图形学课程设计梁友栋-Barsky直线裁剪算法计算机图形学课程设计(总15页)河南理工大学万方科技学院课程设计报告2011 2012学年第二学期课程名称 计算机图形学 设计题目 计算机图形学基本算法 演示系统设计 学生姓名 学 号 专业班级 网络11升1班 指导教师 徐 文 鹏 2012 年 5 月 28 日第5章 总结 17第1章设计内容与要求1.1 总体目标和要求目标:以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试

2、、总结和验收各阶段,达到:1)巩固和实践计算机图形学课程中的理论和算法;2)学习表现计算机图形学算法的技巧;3)培养认真学习、积极探索的精神。总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。开发环境:Viusal C+ ,VC2005或其他你认为比较熟悉的环境。1.2 内容与要求实验分为五项内容。 直线的生成内容:用Bresenham算法画直线要求:1)鼠标移动时,显示鼠标当前位置2)显示判别式的计算过程和下一点的选择策略3)记录生成点的坐标4)图形生成过程可以重复进行 圆弧的生成内容:用Bresenham算法画圆要求:1)鼠

3、标移动时,显示鼠标当前位置2)显示判别式的计算过程和下一点的选择策略3)记录生成点的坐标4)图形生成过程可以重复进行5)橡皮筋技术实现 线段裁剪内容:用梁友栋-Barsky算法进行线段裁剪要求:1)对于线段裁剪,线段被窗口的四条边裁剪的过程要显示出来2)用橡皮筋的形式输入剪裁线段 多边形裁剪内容:用Sutherland-Hodgman算法进行多边形裁剪要求:1)裁剪过程需先输入一多边形,然后用窗口四边裁剪的过程中要显示顶点增删过程。2)用橡皮筋的形式输入剪裁线段 综合内容:把前四次的实验内容整合到一起要求:第2章 总体设计 Bresenham算法画直线 Bresenham算法画直线理论基础计算

4、机是如何画直线的简单来说,就是过各行各列像素中心构造一组虚拟的网格线,按直线从起点到终点的顺序计算各直线与歌垂直网格线的交点,然后确定各列像素中与此交点最近的像素。真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线。 Bresenham算法画直线原理接下来的问题就是如何尽可能高效地找到这些离散的点,Bresenham直线算法就是一个非常不错的算法。Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点。这个算法只会用到较为快速的整数加法、减法和位元移位,常用于绘制电

5、脑画面中的直线。是计算机图形学中最先发展出来的算法。这个算法的流程图如下:可以看到,算法其实只考虑了斜率在 0 1 之间的直线,也就是与 x 轴夹角在 0 度到 45 度的直线。只要解决了这类直线的画法,其它角度的直线的绘制全部可以通过简单的坐标变换来实现。 Bresenham算法画圆 Bresenham算法画圆理论基础Bresenham画圆算法与Bresenham 直线算法一样,其基本的方法是利用判别变量来判断选择最近的像素点,判别变量的数值仅仅用一些加、减和移位运算就可以计算出来。为了简便起见,考虑一个圆心在坐标原点的圆,而且只计算八分圆周上的点,其余圆周上的点利用对称性就可得到。为什么只

6、计算八分圆周上的点就可以了呢和上面的直线算法类似,圆也有一个“八对称性”,如下图所示。 显然,我们只需要知道了圆上的一个点的坐标 (x, y) ,利用八对称性,我们马上就能得到另外七个对称点的坐标。 Bresenham算法画圆原理和直线算法类似,Bresenham画圆算法也是用一系列离散的点来近似描述一个圆,如下图。 Bresenham画圆算法的流程图如下。 可以看到,与画线算法相比,画圆的循环中用到了整数的乘法,相对复杂了一些。 梁友栋-Barsky算法进行线段裁剪梁友栋-Barsky算法进行线段裁剪基本原理我们知道,一条两端点为P1(x1,y1)、P2(x2,y2)的线段可以用参数方程形式

7、表示:x= x1+ u(x2-x1)= x1+ ux,y= y1+ u(y2-y1)= y1+ uy式中,x=x2-x1,y=y2-y1,参数u在01之间取值,P(x,y)代表了该线段上的一个点,其值由参数u确定,由公式可知,当u=0时,该点为P1(x1,y1),当u=1时,该点为P2(x2,y2)。如果点P(x,y)位于由坐标(xwmin,ywmin)和(xwmax,ywmax)所确定的窗口内,那么下式成立:xwminx1+ uxxwmax,ywminy1+ uyywmax这四个不等式可以表示为:upk qk , k=1,2,3,4其中,p、q定义为p1=-x, q1=x1-xwminp2=

8、 x, q2=xwmax-x1p3=-y, q3=y1-ywminp4= y, q4=ywmax-y1可以知道:任何平行于窗口某边界的直线,其pk=0,k值对应于相应的边界(k=1,2,3,4对应于左、右、下、上边界)。如果还满足qk0,则线段完全在边界外,应舍弃该线段。如果pk=0并且qk0,则线段平行于窗口某边界并在窗口内,见图中所示。1、当pk0时,线段从裁剪边界延长线的内部延伸到外部;例如,当x0时,对于左边界p10(p2=x),线段从右边界的内部到外部。当y0(p3=-y),线段从下边界的内部到外部;对于上边界p40(p4=y),线段从上边界的外部到内部。当pK0时,可以计算出参数u

9、的值,它对应于无限延伸的直线与延伸的窗口边界k的交点,即:对于每条直线,可以计算出参数u1和u2,该值定义了位于窗口内的线段部分:1、u1的值由线段从外到内遇到的矩形边界所决定(pk0),对这些边界计算rk=qk/pk,u2取0和各个r值之中的最小值。3、如果u1u2,则线段完全落在裁剪窗口之外,应当被舍弃;否则,被裁剪线段的端点可以由u1和u2计算出来。 Sutherland-Hodgman算法进行多边形裁剪 SutherlandHodgman多边形裁剪算法思想该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。多边形通常由它的顶点序列来表示,经过裁剪规则针对某条边界裁剪后,

10、结果形成新的顶点序列,又留待下条边界进行裁剪,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列,才是结果多边形(它可能构成一个或多个多边形)。当多边形一个顶点Pi相对于窗口某条边界及其延长线进行剪裁时,不外乎下列四种情况(即裁剪规则):1、顶点Pi在内侧,前一顶点Pi-1也在内侧,则将Pi纳入新的顶点序列;2、顶点Pi在内侧,前一顶点Pi-1在外侧,则先求交点Q,再将Q、Pi依次纳入新的顶点序列;3、顶点Pi在外侧,前一顶点Pi-1在内侧,则先求交点Q,再将Q纳入新的顶点序列;4、顶点Pi与前一顶点Pi-1均在外侧,则顶点序列中不增加新的顶点。 点在边界内侧的判断方法为了判断点是否在边界内

11、侧可用坐标比较法和更通用的向量叉积符号判别法。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),向

12、量AB=(xB-xA),(yB-yA),向量AP=(x-xA),(y-yA),那么ABAP的方向可由下式的符号来确定:V=(xB-xA)*(y-yA)- (x-xA)*(yB-yA) 因此,当V0时,P在边界线内侧;而V0时,P在边界线外侧。 Sutherland-Hodgeman多边形裁剪算法特点SutherlandHodgeman多边形裁剪算法具有一般性,被裁剪多边形可以是任意凸多边形或凹多边形,裁剪窗口不局限于矩形,可以是任意凸多边形。上面的算法是多边形相对窗口的一条边界进行裁剪的实现,对于窗口的每一条边界依次调用该算法程序,并将前一次裁剪的结果多边形作为下一次裁剪时的被裁剪多边形,即可

13、得到完整的多边形裁剪程序。第3章 详细设计 Bresenham算法画直线 Bresenham 算法画线算法具体实现过程1、画点(x1, y2); dx=x2-x1; dy=y2-y1;计算误差初值P1=2dy-dx; i=1;2、求直线的下一点位置:xi+1=xi+1;if Pi0 则yi+1=yi+1;否则yi+1=yi;3、画点(xi+1, yi-1);4、求下一个误差Pi+1;if Pi0 则Pi+1=Pi+2dy-2dx;否则Pi+1=Pi+2dy;5、i=i+1; if i|dy|为分支,并分别将2a, 3a象限的直线和3b, 4b象限的直线变换到1a, 4a和2b, 1b方向去,以求得程序处理的简洁。 Bresenham算法画圆 Bresenham 算法画圆核心代码根据Bresenham算法思想编写程序代码,在Bresenham算法画线的基础上画圆,程序代码如下:void BresenhamCircle(int x0,int y0,int R)【2】唐泽圣,等。计算机图形学基础【M】北京:清华大学出版社,1995.【3】徐文鹏。计算机图形学【M】机械工业出版社,2010.

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

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