如何以编程方式合并两个多边形(对象数组)?

时间:2011-05-01 03:11:25

标签: c# algorithm

[编辑:我尝试重写我的问题,因为看起来,没有人理解我想要的东西......而且我想,这只是我的硬算法:)]

我面临的问题是加入单个多边形。每个都是一个4点多边形。最后的结果是两个多边形的合并/并集。

下图显示了可能结果的一个版本(结果可能会有所不同,因为每个结果的黑色填充部分可能不同)。

我从以下内容开始:

Polygon one = [A,B,C,D];  // (A/B/C/D) might look like : new Point {x = 10, y = 15} 
Polygon two = [E,F,G,H];

我需要一个算法来计算这两组的并集,所以我得到的结果如下:

Polygon total = [I,J,K,L,M,N]; // = new points

我不需要对它进行可视化(即使我这样做),我只需要定义新多边形(这两者的并集)的点集,因为我的最终结果将是该合并多边形的质心。
我已经有基于输入点集计算质心的算法。但我需要先得到正确的观点。

到目前为止,我已经发现有关凸壳算法的提及,但我担心它会生成以下多边形(这是错误的):

修改

如此不同的方式,如何看待这个问题: 我有一个程序,能够处理由4个点表示的对象。每个点都有两个属性(x坐标,y坐标) 然后程序能够在这些点之间绘制线条。这些线看起来像一个正方形,矩形或多边形。这个结果取决于给定的坐标,但我知道,我将始终使用点,这将生成多边形。连接点后,程序可以填充此连接区域。绘制完成后,您可以看到以下图像:

http://i51.tinypic.com/28037ee.png

但是:程序不知道,他刚做了一个多边形。他只知道,他得到了4分,他把他们联系起来并填满了他们。

然后我有第二个对象(=多边形),它由另一组点(不同的坐标)定义。程序再次不知道他正在创建一个填充多边形..他只是用4个给定点进行了一些操作。在这种情况下的结果是另一个多边形:

http://i53.tinypic.com/qnog9w.png

现在,我们只是在显示处绘制两个多边形..我们给它们这样的坐标,它们相互重叠。结果看起来像这样(仅考虑填充区域):

我的程序只绘制了两个多边形。精细。您可以在屏幕上只看到一个多边形(因为有两个重叠=它们看起来像一个)而我需要计算该一个单元的质心

我已经有了一个算法,它将接受一组点(表示形成多边形的点)并从这些点计算质心。但我现在不能使用这个算法,因为我不能给他所需的点,因为我不知道它们。

以下是我想要的结果: http://i51.tinypic.com/1z19vtj.png

所以我的算法应该从点A,B,C,D,E,F,G,H开始,他应该给我点I,J,K,L,M,N作为结果。

摘要:我需要计算多边形的质心,这是两个单独多边形的联合/合并的结果,这些多边形是重叠的。

我想,union of two polygons足以解释:)

1 个答案:

答案 0 :(得分:9)

此处http://www.codeproject.com/KB/recipes/Wykobi.aspx是计算几何算法的集合。至少你可以从那里开始。