图形算法13.裁剪.pptxVIP

  • 7
  • 0
  • 约3.67千字
  • 约 82页
  • 2022-07-04 发布于北京
  • 举报
裁剪;裁剪算法;1.点裁剪;2.线段裁剪;图示;(1)cohen-sutherland编码算法;线段的裁剪cohen-sutherland算法;编码的含义;;;线段的编码;算法;图示的线段;交点的计算;结论;如何求交点;算法流程;算法实现;编码;编码;编码;(2)梁友栋-Barsky直线裁剪算法;一维裁剪;梁友栋-Barsky裁剪算法;其中Δx,Δy把窗口边界的四条边分成两类,一类称为 始边,另一类称为终边。 当Δx≥0(Δy≥0)时,称x=xwmin(y=ywmin)为始边, x=xwmax(y=ywmax)为终边。 当Δx0(Δy0)时,称x=xwmin (y=ywmin)为终边, x=xwmax (y=ywmax)为始边。 求出P0P1和两条始边的交点的参数u0’和u0’’,令 u0 = max(u0’,u0’’,0)则u0就是图中A、B和P0三点中 最靠近P1的点的参数。求出P0P1和两条终边的交点的参数 u1’,u1’’ ,令u1 = min(u1’,u1’’,1)则u1就是图中C、D和P1三点中最靠近P0的点的参数。当u1u0时,方程中参数u∈[u0, u1]的线段就是P0P1的可见部分。当u0u1时, 整个直线段为不可见。 ;分析;;分析;分析;;与前一种Cohen-Sutherland算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况:全在、完全不在、线段和窗口有交。 对前两种情况,进行一样的处理。 对于第三种情况,用中点分割的方法求出线段与窗口的交点。 ;在计算交点的时候采用中点分割法,分别求出离两个端点最近的可见点。;1)如果P1可见,则自身就是离P1最近的可见点,结束; 2)如果P1P2显然完全不可见,那么不存在离P1最近的点,结束; 3)求线段P1P2的中点Pm,如果P1Pm的长度小于指定的数,那么Pm就是离P1最近的可见点,结束; 4)如果P1Pm完全不可见,那么就需要求线段PmP2上离P2最近的可见点,即用Pm代替P1,重新回到步骤2;否则,就需要求P1Pm上离P1最近的可见点,即用Pm代替P2,重新回到步骤2。 一般而言,指定的数取值为一个象素的宽度。;P1可见?;(4)Cyrus-Beck算法;点积;;交点;;(5)利用斜率对直线裁剪;;;Else { //斜率为负或者零的情况 if y1yb or y2 yt then stop; if x1 =x2 then goto 2 ; m = (y2+y1)/(x2-x1); if x1 xl then { y1 = m *(xl +x1) + y1; x1 = xl; if y1 yb then stop; } if x2 xr then { y2 = m *(xr-x1) + y1; x2 = xr; if y2 yt then stop;};If y1 = y2 then goto 3 2: if y2 yb then { x2 = (yb-y1)/m + x1; y2 = yb;} if y1 yt then { x1 = (yt + y1)/m +x1 y1 = yt; }} 3: line (x1,y1)(x2,y2) Stop;;2、多边形的裁剪;;Sutherland-Hodgman 算法;c;多边形各顶点的处理规则分析如下:;分析;逐次裁剪多边形的流程;;;算法程序;clip_single_edge(edge, type, nin, xin, yin, nout, xout, yout) int edge, type, nin, *xin, *yin, *nout, *xout, *yout; { int i, k, yes, is_in; int x, y, x_intersect, y_intersect; x=xin[nin]; y=yin[nin]; k=0; for(i=0

文档评论(0)

1亿VIP精品文档

相关文档