输入:多边形面1---多变形面N 的所有角点
输入:并集
输出:布尔运算后的多边形面的面 或者 合并后的多段线
(性能:差)
非精确合并思路1:基于三角形 合成 bool二维栅格代表图形
1. 多边形拆分成三角形
2. 三角形的边线的填充(Vertex A B C), 可以使用bres线填充算法
边AB, BC, CA
3. 基于得到的边像素,每一行从AB,BC,CA中会得出一个yRadius,<left,rigth>; Left-Right 平行线填充
4. 基于多变形的总范围大小,形成矩阵栅格 bool boolArray[X][Y],把所有三角形填入到矩阵栅格
5. 矩阵栅格中所有为true的栅格绘制出来,就是多变形面并的结果
(性能:优)
非精确合并思路2:基于三角形 合成 基于行的映射map<yRadius, lsit< struct<left,right>>>
1. 多边形拆分成三角形
2. 三角形的边线的填充(Vertex A B C), 可以使用bres线填充算法
边AB, BC, CA
3. 基于得到的边像素,每一行从AB,BC,CA中会得出一个yRadius,<left,rigth>; yRadius相同的行,放在同一张延left排序链表lsit< struct<left,right>>中,并进行重叠合并。
struct<left,right>与另一struct<left,right>的关系有几种,基于这几种情况进行重叠合并,从而得出不重叠的lsit< struct<left,right>>
a. 位于另一线左侧
b. 位于另一线右侧
c. 和另一线左侧相交(相邻也归为相交)
d. 和另一线右侧相交(相邻也归为相交)
e. 位于另一线内部
f. 包含另一线
4. map中所有<yRadius, list<struct<left,right>>>栅格绘制出来,就是多变形面并的结果
精确合并思路1:分区二叉树布尔运算合并