gre*_*ade 74 math union geometry
给出两个多边形:
POLYGON((1 0, 1 8, 6 4, 1 0))
POLYGON((4 1, 3 5, 4 9, 9 5, 4 1),(4 5, 5 7, 6 7, 4 4, 4 5))
Run Code Online (Sandbox Code Playgroud)
如何计算并集(组合多边形)?
Dave的例子使用SQL服务器来生成联合,但我需要在代码中完成相同的操作.我正在寻找任何暴露实际数学的语言的数学公式或代码示例.我正在尝试制作将国家动态组合到地区的地图.我在这里问了一个相关的问题:分组地理形状
xtm*_*tmq 58
这个问题问得好.我前段时间在c#上实现了相同的算法.算法构造两个多边形的公共轮廓(即构造一个没有孔的联合).这里是.

输入:第一个多边形(n个点),第二个多边形(m个点).输出:图表.顶点 - 多边形交点.
我们应该找到交叉点.遍历两个多边形[O(n*m)]中的所有多边形边并找到任何交点.
如果未找到交点,只需添加顶点并将它们连接到边.
如果找到任何交叉点,则按长度对它们的起点进行排序,添加所有顶点(开始,结束和交叉点)并将它们(已按排序顺序)连接到边缘.

如果在构建图形时我们没有找到任何交叉点,则我们具有以下条件之一:
找到最小x和y坐标(minx,miny).然后找到(minx,miny)和多边形点之间的最小距离.这一点将是左下角.
我们开始从左下角遍历图形并继续直到我们回到它.在开始时,我们将所有边标记为未访问.在每次迭代中,您应该选择下一个点并将其标记为已访问.
要选择下一个点,请选择逆时针方向具有最大内角的边.
我计算了两个向量:当前边缘的vector1和每个下一个未访问边缘的vector2(如图所示).
对于我计算的向量:
结果,我得到一个具有最大角度的边(和一个对应的下一个顶点).
我添加到每个传递顶点的结果列表.结果列表是联合多边形.

这是一个具有挑战性但很容易理解的主题,通常名为"多边形上的正则化布尔运算".您可以查看 这个MathOverflow答案,其中包括下图(来自Alan Murta的剪辑库),粉红色联合OP的组合: