一种在C#中合并非重叠多边形的简单算法

时间:2014-06-04 17:42:58

标签: c# algorithm merge polygons

我试图实现一个简单的算法来合并一些多边形。多边形不重叠,我需要的算法根本不需要高效。我正在寻找最简单的算法。

我的问题在于多边形10,9和6.如您所见,多边形10和9在合并之前与6不相邻。因此,如果9和5在9和10之前合并,则6个没有机会与10和9合并。但是如果我合并10,9首先我将能够合并最终的多边形与10.我该如何解决这个问题?

enter image description here

1 个答案:

答案 0 :(得分:1)

如何将形状与重叠的边合并?

  • 提取所有形状的所有边缘

  • 对边缘进行排序

    • 首先通过渐变,

    • 然后通过y值,如果延伸到远处,该边将穿过x轴 (或者如果它与y轴平行,则为x值),

    • 然后是边缘的最小y端点(如果它与x轴平行,则为最小的x点)。

  • 迭代边缘

    • 前两个排序标准只是为了消除非重叠边缘(我们基本上可以认为那些与前两个排序标准不匹配的边缘存储在不同的数据结构中)。

    • 对于第三个标准,请执行以下操作:

      如果此边缘在上一个边缘结束之前开始(使用相同的前两个条件),请合并形状(如果它们尚未合并)。

示例:

我们分割水平和垂直边缘。

然后我们订购水平边缘,使得3-10(3-1,1-2,2-11等)上的所有边缘相互跟随,然后是7-9上的边缘,然后是2上的边缘-6(请记住,我们首先按它们的y值排序,因为如果它们扩展到x轴,它们在那里具有相同的y值,那么我们按最小的x端点排序)

然后我们订购垂直边缘,使2-3(2-7和7-3)的边缘相互跟随,然后是14-1,然后是5-2边缘等(请记住,它们与y轴平行,所以我们先取x值,然后按最小的y点排序。

请记住,14-1等边缘会出现两次,因为它是10和9的边缘,我们将有7-8,7-14和14-8的边缘。

现在我们遍历边缘:

我们从3-1开始。它没有前一个优势,所以我们什么都不做。 1-2在其上一个边缘(3-1)之后开始,所以我们什么都不做。同样地,对于2-11,11-41,41-19和19-10。

然后7-8。没有先前的优势,所以什么都不做。然后我们做7-14。从7 < 8开始,我们合并了相应的形状10和6。

等等。