1 引言
多边形 PPP 的划分是由一组多边形组成的集合,这些多边形的内部不相交,且它们的并集等于原始多边形 PPP 的内部。本章介绍将平面多边形划分为两类子多边形的函数——y 单调多边形和凸多边形。这些划分过程不会引入新的(Steiner)顶点。
所有划分函数对用户提供相同的接口。用户需要提供一对输入迭代器 first,beyondfirst, beyondfirst,beyond,一个输出迭代器 resultresultresult,以及一个 traits 类。区间 [first,beyond)[first, beyond)[first,beyond) 内的点被假定定义了一个简单多边形,且顶点按逆时针顺序排列。计算得到的划分多边形(顶点同样按逆时针排列)将被写入从 resultresultresult 开始的序列中,并返回该序列的末尾迭代器。traits 类指定了输入点和输出多边形的类型,以及算法需要的其他类型和函数对象。
2 单调划分
y 单调多边形是指其顶点 v1,…,vnv_1, \ldots, v_nv1,…,vn 可以分成两条链 v1,…,vkv_1, \ldots, v_kv1,…,vk 和 vk,…,vn,v1v_k, \ldots, v_n, v_1vk,…,vn,v1,使得任意水平线最多与其中一条链相交一次。为了生成给定多边形的 y 单调划分,实现了文献[1]中的扫描线算法,该算法由函数 y_m