多边形裁剪

错觉:直线段裁剪的组合?
新的问题

  • 边界不再封闭,需要用窗口边界的恰当部分来封闭它,如何确定其边界?

  • 一个凹多边形可能被裁剪成几个小的多边形,如何确定这些小多边形的边界?

Sutherland-Hodgman算法

Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德(I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的。这种算法采用了分割处理、逐边裁剪的方法。

1、算法介绍

  1. 分割处理策略:

    该算法的基本思想是将多边形边界作为一个整体,每次用窗口的一条边要裁剪的多边形和中间结果多边形进行裁剪,体现一种分而治之的思想。

  2. 流水线过程(左上右下):前边的结果是后边的输入

2、算法思想

  • 基本思想是一次用窗口的一条边裁剪多边形。

  • 考虑窗口的一条边以及延长线构成的裁剪线该线把平面分成两个部分:可见一侧和不可见一侧

  • 多边形的各条边的两端点S、P。它们与裁剪线的位置关系只有四种

    • 情况(1):起点终点都在可见一侧,仅输出顶点P
      • 如果都输出,会出现多边形的点重复
    • 情况(2):起点终点都不在可见一侧,输出0个顶点;
    • 情况(3):起点在可见一侧,终点在不可见一侧,输出线段SP与裁剪线的交点I;
    • 情况(4):起点在不可见一侧,终点在可见一侧,输出线段SP与裁剪线的交点I和终点P

3、算法框图

  • 上述算法仅用一条裁剪边对多边形进行裁剪,得到一个顶点序列,作为下一条裁剪边处理过程的输入。
  • 对于每一条裁剪边,算法框图同上,只是判断点在窗口哪一侧以及求线段SP与裁剪边的交点算法应随之改变。

4、小结

  • 对凸多边形应用本算法可以得到正确的结果,但是对凹多边形的裁剪将如图所示显示出一条多余的直线。这种情况在裁剪后的多边形有两个或者多个分离部分的时候出现。因为只有一个输出顶点表,所以表中最后一个顶点总是连着第一个顶点。
  • 解决这个问题有多种方法,一是把凹多边形分割成若干个凸多边形,然后分别处理各个凸多边形。二是修改本算法,沿着任何一个裁剪窗口边检查顶点表,正确的连接顶点对。再有就是Weiler-Atherton算法。
posted @ 2020-03-15 12:59  我係死肥宅  阅读(1574)  评论(0编辑  收藏  举报