计算机图形学 - 多边形裁剪算法

版权声明:本文为博主原创文章,欢迎转载,转载请贴上博客地址 http://blog.csdn.net/xdg_blog https://blog.csdn.net/xdg_blog/article/details/52865005

算法描述:

Sutherland_Hodgman算法:

  该算法基于下述基本思想:即可以简单地通过单一边或面的裁剪实现对多边形的裁剪。因此在算法中,原多边形和每次裁剪所生成的多边形将逐次对裁剪窗口的每一条边进行裁剪。图4-28显示了一个矩形窗口,多边形为顶点表P1,P2,…,Pn,由此可得多边形的边P1P2,P2P3,…,Pn-1Pn,PnP1。在图4-28(a)中,这些边将首先被窗口左边裁剪。生成的多边形如图4-28(b)所示。然后逐次裁剪,中间多边形又被窗口的上边所裁剪,生成第二个中间多边形。继续这一过程,直至多边形依次被窗口所有边裁剪完为止。裁剪各步骤如图4-28(b)~(e)。每执行一步,则生成一个新的顶点序列,并将生成的顶点序列作为下一条窗口边界裁剪的输入顶点序列。

这里写图片描述

  窗口的一条边及其延长线构成的裁剪线,把平面分为包含窗口区域的可见一侧,不包含窗口区域的不可见一侧,这样沿着多边形依次处理顶点会遇到4种情况:

  1.   一点S在不可见一侧,第二点P在可见一侧(如图4-29(a)),则SP与窗口边界的交点I与P均被加入到输出顶点表中;
  2.   S和P都在可见一侧(如图4-29(b)),则P被加入到输出顶点表中;
  3.   S在可见一侧,P在不可见一侧(如图4-29(c)),则交点I被加入到输出顶点表中;
  4.   如果S和P都在不可见一侧(如图4-29(d)),输出顶点表中不增加任何顶点。
    这一算法可以正确地实施对凸多边形的裁剪,而且可以很容易地推广到三维裁剪。但是对凹多边形裁剪时,就有可能产生多余的边,如图4-30所示。这是因为裁剪后多边形变成独立的两个以上部分,但是输出顶点表只有一个。为了正确地显示凹多边形的裁剪,可以把凹多边形分割成两个或两个以上的凸多边形,然后分别处理每一个多边形。
    这里写图片描述
    这里写图片描述

实现代码:

计算机图形学-Code 1

效果展示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/xdg_blog/article/details/52865005