0

多边形图像 在此处输入图像描述

所有的多边形都很简单,里面没有洞。板多边形(P0 到 P7)

红色多边形(R0 到 R6)

绿色多边形(G0 G1 P2 G3)

黄色多边形(Y0 到 Y3)

我想要新的四个多边形标记为 1 到 4 ,多边形 1 的坐标是(J7 J10 R5 R4)。当我使用多边形裁剪算法时,我可以很容易地得到结果,board diff(red union green union yellow)。但是当我有超过 10,000 个多边形时,我需要很长时间才能得到结果。我的多边形很简单,我的结果多边形也很简单,结果多边形中也没有孔。

你知道我可以很容易地用眼睛找出图像中的四个多边形,但是如何使用算法找到它们。谢谢。

4

1 回答 1

1

如果您计算的黑色多边形的所有顶点在顶点处相交的边不超过 2 条,那么可能有比更通用的工具更快的方法。

由于多边形的数量在 10000 左右,首先尝试计算所有多边形对的交点,并希望交点的数量足够小(比如 1000 万或更少)。然后,对于每个交点进行测试,看看它是否包含在另一个多边形的内部(如果您有多个共同重叠的多边形)。测试看一个点是否包含在多边形内部可以很快完成,您可以在线阅读。然后,不包含在另一个多边形中的所有交点,其中还包含不包含在多边形内部的所有原始多边形顶点,这些是您要计算的“黑色”多边形的顶点。这些点应该以二级结构存储,对于每个多边形边缘,它按排序顺序存储沿该边缘的所有存储交点。同样,对于每个存储的顶点和交点,您应该存储在该点相交的边,以及前一个结构中交点的位置。因此,然后选择任何尚未在黑色多边形中使用的存储交点,并选择定义交点的一条边。然后沿着边缘移动到相邻的交点,该边缘具有两个交点之间的边缘部分不通过多边形内部的属性。然后继续类似地沿着定义相邻交点的另一条边移动。继续直到到达您开始的顶点;这定义了一个黑色多边形。然后您可以选择一个新的未使用的存储交叉点并重复。

于 2013-07-14T16:28:28.310 回答