最近在复习计算机图形学,又被这个算法给难倒了,记得第一次学就找了好多资料,当时也没记得写个博客啥的记下来,这次一定要写下来,可不能再搞忘了(╥﹏╥),如果有不对的地方欢迎指正~
Cyrus-Beck算法是一种凸多边形裁剪算法,也叫做参数化裁剪算法。下面给出书上的例子:
如下图所示,是一个凸多边形区域R和一条线段,目标是求出线段落在区域R中的部分。
将线段用参数方程表示:
其中,
接下来我们直接上图:
图中A点是区域边界上一点,由它引出来一条内法线,P是线段
上任意一点,那么这两个向量的乘积将会有三种结果:
讲解到这里,我们需要在引入两个概念:分别是起点组和终点组。我们要把区域的各边(包括延长线)与线段的交点分别划分为上面的两个组中,才能方便接下来的操作。我们发现,区域上各边的内法向量与向量
的乘积有两种情况,分别是大于0、小于0,我们就依据此将其划分为两个组。
实际上,对于上面讲到的参数方程,我们所要找的就是参数t的取值范围。
由此,我们可以进行计算了: