扫描转换多边形算法-jzhszcom.ppt

  1. 1、本文档共230页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扫描转换多边形算法-jzhszcom

裁剪的边界可以是任意多边形,但常用的裁剪边界是矩形,例如显示屏幕。 被裁剪的对象可以是线段、圆弧段、符号、多角形以及由他们构成的各种图形。 线段裁剪是图形裁剪的基础。 裁剪算法的核心问题是速度问题。 2.4.1点的剪取 任何图形都可能包含点、直线、字符、和多边形乃至曲线, 但它们都可以分解成点的集合。所以点的剪取是图形剪取中最基本的问题。 假设窗口的左下角坐标为(xmin,ymin),右上角坐标为(xmax,ymax),对于给定点P(x,y),则P点在窗口内的条件是要满足下列不等式: xmin = x = xmax and ymin = y = ymax 否则,P点就在窗口外。 第二部分 二维裁剪 点的剪取 (xmin,ymin ) (xmax,ymax ) 2.4.2直线段的剪取 直线与窗口的关系通常有以下三种情况: 整个线段全在窗口内(完全可见); 整个线段全落在窗口某条边所在直线的外侧(显然不可见); 线段至少有一端点在窗口之外,但非显然不可见。 当窗口采用凸多边形时,任何一条直线 只会至多有一段在窗口内: 当一条直线的两个端点全在窗口内时,该直线整个在窗口内 当一条直线的两个端点,一个在窗口内,一个在窗口外时,该直线部分在窗口内,部分在窗口外 当一条直线的两个端点全在窗口外时,该直线可能整个在窗口外,也可能部分在窗口内,部分在窗口外 第二部分 二维裁剪 直线段的剪取 1. Cohen-Sutherland算法步骤 第一步:判别线段两端是否都落在窗口内,如果是,则线段完全可见;否则进入第二步。 第二步:判别线段是否为显然不可见,即线段的两端点均落在窗口某边所在直线的外侧,如果是,则裁剪结束,否则进入第三步。 第三步:求线段与窗口边延长线的交点,这个交点将线段分为两段,其中一段显然不可见,丢弃。对余下的另一段重新进行第一步、第二步判断,直至结束。 第二部分 二维裁剪 直线段的剪取 Cohen-Sutherland算法基本原理 首先用窗口四条边所在的直线将整个二维平面分成9个区域,每个区域赋予一个四位的编码CtCbCrCl,它表示该区域与窗口的四个相对坐标位置: 上,下,右,左。任何位赋值为1,代表该区域落在相应的位置上,否则该位为0。则裁剪窗口的编码为0000。 然后确定待裁剪线段的两个端点的编码,即为它所在区域的编码。 第二部分 二维裁剪 0000 1000 1001 1010 0001 0101 0010 0110 0100 直线段的剪取 Cohen-Sutherland算法基本原理 一旦给定所有的线段端点的编码, 就可以快速判断哪条直线完全在剪 取窗口内,哪条直线完全在窗口外。 所以得到一下规则: 如果两端点的编码均为0000,表示该线段在窗口内。 如果两端点的编码逻辑与不为0000,表示该线段在窗口外。 如果两端点的编码不全为0000,但逻辑与为0000,则该线段部分可见,需计算直线与窗口的交点,确定哪一部分可见。 第二部分 二维裁剪 0000 1000 1001 1010 0001 0101 0010 0110 0100 直线段的剪取 2.梁友栋-Barsky算法 r此算法的主要特色是: q把二维裁剪的问题化成二次一维裁剪问题,而把裁剪问题转化为解一组不等式的问题; q改善了Cohen-Sutherland 的编码算法中全部摒弃的判断只适合于那些仅在窗口同一侧(或左、或右、或上、或下) 线段的不足。 r算法分成一维和二维两部分,前者是后者的基础。 梁友栋-Barsky算法——一维裁剪 r P1,P2位于窗口的左边 r P1,P2跨越窗口的左边界 r P1,P2在窗口的内部 r P1,P2跨越窗口的右边界 r P1,P2位于窗口的右边 r P1,P2跨越整个窗口 一维裁剪的本质是求取2条线段的公共部分。 W1 W2 改进的Bresenham算法: r 令e=d-0.5,关于d的判别式和初值可简化成: qe的初值e0= -0.5,增量亦为k; qe0时,取当前象素(xi,yi)的右方象素(xi +1,yi,r) ; qe=0 时, 取当前象素( xi,yi) 的右上方象素 (xi +1,yi,r +1) ,且e减小1; rBresenham算法的构思巧妙:它引入动态 误差e,当x方向每次递增1个单位,可根 据e的符号决定y方向每次递增0或1。 qe0, y方向不递增 qe0, y方向递增1 qx方向每次递增1个单位,e = e + k 2.1.3圆弧的扫描转换 r对圆的分析均假定圆心在坐标原点,因为 即使圆心不在原点,可以通过一个简单的 平移即可,而对原理的叙述却方便了许多 r即考虑圆的方程为: (x2+y2)=R2 2.1.3圆弧的扫描转换 根据圆的方程:(x2+y2)=R2用扫描线方式

文档评论(0)

wangsux + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档