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

C# 如何以编程方式合并两个多边形(对象数组)?,c#,algorithm,C#,Algorithm,[编辑:我试图重写我的问题,因为似乎没有人理解我想要什么…我想,这是一个只对我来说很难的算法:)] 我面临的问题是单个多边形的连接。每个都是一个4点多边形。最终结果是两个多边形的合并/并集 下图显示了可能结果的一个版本(结果可能会有所不同,因为每个结果的黑色填充部分可能不同) 我从以下内容开始: Polygon one = [A,B,C,D]; // (A/B/C/D) might look like : new Point {x = 10, y = 15} Polygon two = [

[编辑:我试图重写我的问题,因为似乎没有人理解我想要什么…我想,这是一个只对我来说很难的算法:)]

我面临的问题是单个多边形的连接。每个都是一个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坐标)。
然后程序就可以在这些点之间画线了。这些线将看起来像正方形、矩形或多边形。。这个结果取决于给定的坐标,但我知道,我将始终使用点来生成多边形。一旦连接点,程序就能够填充该连接区域。绘制完成后,您可以看到以下图像:

但是:程序不知道,他只是做了一个多边形。他只知道,他从我那里得到了4分,他把他们连在一起,然后补上了

然后我有第二个对象(=多边形),它由另一组点(不同的坐标)定义。程序再次不知道他正在创建一个填充多边形。。他只是做了一些手术,得到了4分。本例中的结果是另一个多边形:

现在,我们只需在显示屏上绘制两个多边形。。我们给了它们这样的坐标,它们相互重叠。结果如下所示(仅考虑填充区域):

我的程序只画了两个多边形。好的您在屏幕上只能看到一个多边形(因为有两个重叠=它们看起来像一块),并且我需要计算这一块的质心

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

以下是我想要的结果:

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

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


我想,两个多边形的并集就足以解释:)

这是一组计算几何算法。至少你可以从这里开始。

你能解释一下黑白部分是什么意思吗?@Pavan:当然。白色多边形表示模糊集。但这对算法来说并不重要。这只是4个点的数组的可视化(渲染为多边形)。每个模糊集都有自己的“填充量”(取决于外部因素)。所以模糊集(多边形)可以从15%或38%填充,也可以任意填充。。。0-100%. 它基本上表示集合的充分程度(填充越多=充分程度越高)。这有用吗?我可能不能用英语很好地解释它。但问题是,我有两个多边形(=2D空间中的8个点),我需要找到它们的并集(这也是一个多边形)。@Pavan:可能这张图片有误导性,因为它显示黑色部分已经连接在一起了。但该图像实际上是两个重叠的多边形(每个多边形由其自己的点/坐标集定义)。我可以想象,但我的程序不知道这两者的实际结合。他们只是在展览中出现。@Pavan:如果你还感兴趣的话,我重新编辑了我的问题。。好吧。。最后有一些有用的理论。我可以想象,它将帮助我实现该算法(例如计算特定直线的交点),但我需要先了解该算法。