一个加权剖分简单多边形为凸多边形的算法
本文的内容来自于计算机学报第21卷第3期的内容
权函数
剖分简单多边形为凸多边形要通过逐次加入剖分线来消除凹点,如果加入的一条剖分线连接了两个凹点,两个凹点转化为分属的两个子多边形,在每个子多边形中都表现为凸点,这是所做的剖分是最佳剖分,理想的情形是每次都做最佳剖分,记每次都能唯一的找到一条可构成最佳剖分的剖分线,逐次就爱如这样的剖分线就完成了剖分,但实际上最佳剖分有时会不存在,有时又会有多个
如果简单多边形中两个顶点间的连线全部都落在多边形内部,则这两个顶点式彼此可视的,容易理解剖分问题实际上就是挑选一些彼此可视的顶点对,并连接作为加入的剖分线,可见只要能够建立一种适当的权函数,就能够每次都按照权值最大而唯一确定的挑选出应加入的剖分线
为建立适当的权函数需要考察他具有的性质,设点pi是简单多边形中一个待消除的凹点,过点pi的前后两条边做直线,将平面划分为四个区域如下图

要想在点pi处得到最佳剖分,从点pi处发出的剖分线必须落在区域0中,如果落在区域1或者区域3中,那么其分属的2个子多边形中表现为一个是凸点一个是凹点,区域2是剖分线不能落入的多边形外部
从简单多边形任意个一点顶点pi发出剖分线可以取得权值为

{ωpi=fα若点是凹点,三个点形成右转ωpi=fα若点是凸点,三个点形成左转
其中max1和max2是事先给定的控制参数,分别对应了两种情形的极大值
⎩⎨⎧fa=max1α1α0<α<α1fa=max11+α2−α1α−α1α1≤α<α2fa=max12−α3−α2α−α2α2≤α<α3fa=max11−α4−α3α−α3α3≤α<α4fa=0其他
⎩⎨⎧ga=max2α1α0<α<α1ga=max11+α2−α1α−α1α1≤α<α2ga=0其他
算法描述
- 检查并标记简单多边形的凹顶点
- 确定简单多边形中至少有一个凹点的所有可视点对
- 为每组可视点计算权值
- 对已得到的所有可视点进行按权值排序
- 逐次加入剖分线实现剖分