《计算机图形学》基本图形生成算法.pptVIP

《计算机图形学》基本图形生成算法.ppt

  1. 1、本文档共230页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
标题:梁友栋-Brian裁剪算法简介及适用场景主要内容包括梁友栋提出的梁友栋-Brian裁剪算法的基本思想以及它在国内外的应用。介绍:梁友栋是浙江大学CAD国家重点实验室教授,提出了一种用于处理二维空间的裁剪方法。其基本思想是将二维裁剪归结为一维裁剪,然后通过解决一些一元不等式来达到对空间区域的隔离和分析。应用场景:梁友栋-Brian裁剪算法主要应用于三维空间中,可以实现多边形的剪切和平移。其中,对多边形的切割问题可以通过将其分割成多个较小的连续部分来进行。总结:梁友栋-Bria

(三)梁友栋-Brian裁剪算法 梁友栋是浙江大学CAD国家重点实验室教授,他提出的裁剪算法在国内外也得到广泛的承认。梁友栋-Brian裁剪算法的基本思想是将二维裁剪归结为一维裁剪,把多边形的裁剪变成解一元不等式组的问题。 设一维直线上有“窗口”Q1Q2,坐标q1≤q2,考察该直线上线段AB,其坐标a≤b,则窗口内可见部分VW=AB∩Q1Q2。AB与Q1Q2的关系如表5.3.1所示。 由上表可归结为下述结论:AB在Q1Q2上可视线段存在的充要条件为: max(min(a,b),min(q1,q2)) ≤ min(max(a,b),max(q1,q2)) (公式5-1) 可视部分为: max(min(a,b),min(q1,q2)) ≤x≤ min(max(a,b),max(q1,q2)) (公式5-2) 例如,图5.4.4为一窗口和线段AB,若AB不平行于窗口边,则AB所在直线及其延长线与窗口四边有交点L,R,T,U。窗口部分Q1Q2=LR∩TU,线段AB在窗口的部分为: VW=AB∩Q1Q2=AB∩LR∩TU。(xl,yb)(xr,yt)ABQ1Q2ULTR图5.4.4 梁友栋-Brian裁剪算法示例 设窗口左下端点为(xl,yb),右上端点坐标为(xr,yt),该算法分以下几种情况: (1)若AB平行于上下窗口边,即Ay=By,且在窗口其间,则可视部分VW=AB∩LR; (3) 当Ax≠Bx,且Ay≠By,VW存在的充要条件为: max(xl,min(Ax,Bx),min(Tx,Ux))≤min(xr,max(Ax,Bx),max(Tx,Ux)) (公式5-3) 可视线段VW的x区间为: max(xl,min(Ax,Bx),min(Tx,Ux))≤x≤min(xr,max(Ax,Bx),max(Tx,Ux)) 同理,可视线段VW的y区间为: max(yb,min(Ay,By),min(Ly,Ry))≤y≤min(yt,max(Ay,By),max(Ly,Ry)) (4)当Ax=Bx时,VW存在的充要条件为: max(yb,min(Ay,By)) ≤min(yt,max(Ay,By)) 当Ay=By时,VW存在的充要条件为: max(xl,min(Ax,Bx)) ≤min(xr,max(Ax,Bx)) 可视部分: V=( max(xl,min(Ax,Bx)), max(yb,min(Ay,By))) W=( min(xr,max(Ax,Bx)), min(yt,max(Ay,By))) 根据以上描述,算法描述: double xl,xr,yt,yb; Void L_Barsky(double x0,y0,x2,y2) { double t0,t1,deltax,delaty; t0=0.0;t1=1.0; deltax=x2-x0; if(!cansee(-deltax,x0-xl,t0,t1)) return; if(!cansee(-deltax,xr-x0,t0,t1)) return; deltay=y2-y0; if(!cansee(-deltay,y0-yb,t0,t1)) return; if(!cansee(-deltay,yt-y0,t0,t1)) return; x2=x0+t1*deltax; y2=x0+t1*deltay; x0=x0+t0*deltax; y0=x0+t0*deltay; showline(x0,y0,x2,y2);} Bool cansee(double q,d,t0,t1) { double r; if(q0) { r=d/q; if (rt1) {cansee=false;return;} else if (rt0) t0=r; } else if(q0) { r=d/q; if(rt0){cansee=false;return;} else if (rt1) t1=r; } else if (d0){cansee=false;return;} cansee=true; } max(xl,min(Ax,Bx)) ≤min(xr,max(Ax,Bx)) 可视部分: V=( max(xl,min(Ax,Bx)), max(yb,min(Ay,By))) W=( min(xr,max(Ax,Bx)), min(yt,max(Ay,By))) 根据以上描述,算法

文档评论(0)

东风继续吹 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档