四、几何图形的裁剪 图形学讲义 教学课件.pptVIP

四、几何图形的裁剪 图形学讲义 教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四、几何图形的裁剪 图形学讲义 教学课件

四、几何图形的裁剪 就是在一个图形的整体中,把窗口的内部分和窗口外部分正确地分离开来。这种技术称为裁剪。 1. 线段裁剪 线段和窗口的关系 要确定一条直线段上位于窗口内的可见段,只须求出它的两个位于窗口内的可见端点即可。 算法的基本思想 把所有的直线按照它和窗口的关系分类,不同的直线使用不同的处理方法确定其可见部分。 矢量裁剪算法 用窗口的四条边界的直线将窗口分为9个区。 排斥性测试 若线段满足下述四个条件之一时: max(x1,x2)≤xl min(x1,x2)≥xr max(y1,y2)≤yb min(y1,y2)≥yt 则线段必定位于窗口之外,无输出线段。 包含性测试 若线段满足:xl≤x1≤ xr, yb≤y1≤ yt,则线段的始点在0区,也即线段可见段的起点为: xs = x1 , ys= y1 求交点,并判断 I. 若x1<xl,则: 线段的起点坐标可能 位于3区、4区、5区。 而新起点的坐标可能在 直线y= yb和线段的交点上 直线y= yt和线段的交点上 直线x= xl和线段的交点上 第一种情况: 此时,若xl≤xs≤ xr 则(xs ys)为有效新起点。 第二种情况: 此时,若xl≤xs≤ xr 则(xs ys)为有效新起点。 II. 若x1xr 线段的起点坐标可能 位于6区、7区、8区。 而新起点的坐标可能在 直线y= yb和线段的交点上 直线y= yt和线段的交点上 直线x= xr和线段的交点上 第一种情况: 此时,若xl≤xs≤ xr 则(xs ys)为有效新起点。 第二种情况: 此时,若xl≤xs≤ xr 则(xs ys)为有效新起点。 第三种情况: 此时,若yb≤ys≤ yt 则(xs ys)为有效新起点。 若此三种情况都不满足,则此线段不在窗口区内。 使用同样的方法,可得到直线在窗口的另一个可见端点。 编码法 该法的基本思想是: 1)首先判断线段是否完全位于窗口内,如果是,则输出原线段,如果不是,那么再进而判断是否完全位于窗口外,若是,则排除该线段,无输出。 2)如果以上测试都不满足的话,那么就将该线段用窗口边线分割为二段,然后再回到1)进行上述测试。 实现方法: 将窗口边线两边沿长,得到九个区域,每一个区域都用一四位二进制数标识,直线的端点都按其所处区域赋予相应的标识码。 第一位 1:点处于左边框线的左边; 第二位 1:点处于右边框线的右边; 第三位 1:点处于下边框线的下边; 第四位 1:点处于上边框线的上边; 显然: 如果某线段的两端点的两个四位代码全为零时那么该线段完全位于窗口内;如果两端点的标识码的逻辑乘不为零,那么该线段必位于窗口外。 如果线段被分割,端点有了新的代码,然后再进行上述测试,测试结果是必有一段在窗口之外,可被排除,另一段再重复上述处理过程。 如何判定该与窗口的哪条边求交呢? 编码中对应位为1的边。 中点分割算法 定义:线段端点的最远可见点是指任一线段被窗口裁剪后所得两个新端点中离该端点较远的一个点。如下图所示。 A的最远可见点为a, B的最远可见点为b. 中点分割法的基本思想即是: 不断地用对分方法,舍去线段的不可见部分,用中点去逼近线段与窗口边界的交点。 实现算法:(以A点为例说明) 1)排斥性测试,测试线段是否完全被排斥在窗口之外,若是,则无线段输出,算法结束。否则执行下一步; 2)包含性测试,测试B点是否包含在窗口内,如果是,则B点即为A的最远可件点,算法结束,否则,执行下一步; 3)将直线段AB于中点M处分割,则分如下几种情况处理: 线段MB完全在窗口之外,那么便以线段AM为新的线段AB,然后返回算法的第一步重新开始测试; 如果线段MB没有被完全排斥在窗口之外,那么便以线段MB作为新线段AB,然后返回算法的第一步1)。 #define TRUE 1 #define FALSE 0 int mid_trim(p1,p2,xmin,ymin,xmax,ymax, a) float p1[3],p2[3],xmin,ymin,xmax,ymax, a[3]; { float A[3],B[3],M[3]; set_point(p1, A); set_point(p2, B); while(TRUE){ if(Identify_line_out(A, B,xmin,ymin,xmax,ymax)==T

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档