我正在寻找一些相当容易的(我知道多边形联合不是一个简单的操作,但也许有人可以用一个相对简单的方法指向我的方法)合并两个相交的多边形.多边形可以是没有孔的凹面,输出多边形也不应该有孔.多边形以逆时针方式表示.我的意思是在图片上显示.正如你所看到的那样,即使在多边形的组合中有一个洞,我也不需要它在输出中.输入多边形肯定没有洞.我认为没有漏洞应该更容易,但我仍然没有想法.

我有两个2D矩形,定义为原点(x,y)的大小(高度,宽度)和旋转角度(0-360°).我可以保证两个矩形的大小相同.
我需要计算这两个矩形的近似交叉区域.

计算不需要精确,尽管可以.我将把结果与其他交叉区域进行比较,以确定一组矩形中最大的交叉区域,因此它只需要相对于同一算法的其他计算准确.
我想过使用相交区域的边界框区域,但由于所有不同的可能情况,我无法获取相交区域的顶点:

我正在Cocoa框架中的Objective-C中编写这个程序,这是值得的,所以如果有人知道任何快捷方式使用NSBezierPath或者你也欢迎提出建议.
我正在使用Dundas Maps并尝试绘制世界地图,其中国家/地区被分组到特定于业务实现的区域.
我有世界上每个国家的形状数据(点和段).通过将区域内的所有国家/地区的所有点和细分添加到新的区域形状,我可以将国家/地区组合到一起.
foreach(var region in GetAllRegions()){
var regionShape = new Shape { Name = region.Name };
foreach(var country in GetCountriesInRegion(region.Id)){
var countryShape = GetCountryShape(country.Id);
regionShape.AddSegments(countryShape.ShapeData.Points, countryShape.ShapeData.Segments);
}
map.Shapes.Add(regionShape);
}
Run Code Online (Sandbox Code Playgroud)
问题是国家边界线仍然出现在一个区域内,我想删除它们,以便只显示区域边界.
Dundas多边形必须在同一点开始和结束.所有国家形状都是如此.现在我需要一个能够:
以下是我到目前为止使用地图的地方.您可以看到仍需要删除国家/地区边界.例如,蒙古和中国之间的边界应该被丢弃,而蒙古和俄罗斯之间的边界应该保留.
我需要保留区域边界的原因是区域颜色在传达信息方面很重要,但相邻区域可能是相同的颜色.这些地区可以改变以包括或排除国家,这就是区域塑造必须是动态的原因.
编辑: 我现在知道我正在寻找的是一个多边形联盟.David Lean 解释了如何使用SQL Server 2008中的空间函数来执行此操作,这可能是一个选项,但我的努力已经停止,因为生成的多边形联合非常复杂,以至于SQL将其截断为43,480个字符.我现在正在尝试为此找到解决方法或找到在代码中进行联合的方法.

假设我有很多多边形,构造多边形的最佳算法是什么 - 可能是所有这些多边形的并集孔?
为了我的目的,你可以想象每个多边形作为一个拼图块,当你完成它们你会得到一个很好的图片.但问题是,缺少一小部分(比如<5%)的拼图,你仍然要求尽可能完整地形成一幅画面; 这是多边形(或多边形) - 可能有孔 - 我想形成.
我天真的方法是取两个多边形,合并它们,然后取另一个多边形,将它与两个多边形的并集联合起来,然后重复这个过程,直到每个单元都结合在一起.然后我将遍历联合多边形列表并检查是否仍然可以组合一些多边形,并且我将重复此过程,直到获得满意的结果.
但这似乎是一种非常天真的方法.我只是想知道还有其他更好的算法吗?
我从投影到2D平面的3D模型中得到了一堆重叠的三角形.我需要将触摸三角形的每个岛合并成一个封闭的非凸多边形.
生成的多边形不应该有任何孔(因为源数据不会).
许多源三角形与源数据中的其他三角形共享(浮点相同)边.
最简单的方法是什么?性能不是特别重要,因为这将在设计时完成.
我正在寻找一种方法/算法,它允许我将3d网格上的几个相邻共面面合并为一个面.我希望这将优化我的网格生成程序,因为它现在生成许多'小'三角形.当我在屏幕上看到最后的三维物体时,我可以看到它们都朝向同一个方向,并且它们可以被一个包含整个物体的更大的三角形取代!我希望我很清楚我想要做什么.谢谢你的帮助.
我正在开发一种建模工具,可以让您直接操作网格。例如,您可以抓住一张脸并将其拖动。用户对“脸”的感知可能是多个共面三角形。例如,立方体的顶“面”实际上是两个三角形,它们被拖到一起形成一个正方形。
为了实现这一点,我想收集任何特定三角形的所有共面、相邻面,以便在拖动时使用。我已经查看了Simplifier以及这篇文章作为示例,但我想保留底层三角形,而不是减少/删除它们。
在过去的美好时光,您可以构建一个边缘模型 ala Mantlya,您可以在每个边缘上行走以查看相邻的面并检查法线。
我希望可能已经为 THREEJS 编写了一些代码,将共面三角形组合在一起。如果我从头开始写这个,我能想到的最好的算法是 O(n^2),类似于:
当该算法完成时,您应该拥有一个所有面共面且与开始的面相邻的数组。但对我来说,这似乎效率相对较低。
欢迎任何和所有建议/指示!
我在地图上定义了多边形,纬度和经度作为坐标系.我想合并所有重叠的多边形.

来自这个问题
我找到了这个软件:软件
我下载了代码,它适用于笛卡尔坐标.但是,我不知道如何利用它来获得纬度和经度.
什么是解决这个问题的最佳方法?
例如,这里是我要合并的多边形:
var polyA = new List<GpsLocation>();
var pA1 = new GpsLocation(0, 0);
polyA.Add(pA1);
var pA2 = GpsHelper.CreateLocationBasedOnBearingDistance(pA1, 5, 100);
polyA.Add(pA2);
var pA3 = GpsHelper.CreateLocationBasedOnBearingDistance(pA2, 95, 100);
polyA.Add(pA3);
var pA4 = GpsHelper.CreateLocationBasedOnBearingDistance(pA3, 185, 100);
polyA.Add(pA4);
var polyB = new List<GpsLocation>();
var pB1 = GpsHelper.CreateLocationBasedOnBearingDistance(pA1, 95, 50);
polyB.Add(pB1);
var pB2 = GpsHelper.CreateLocationBasedOnBearingDistance(pB1, 5, 100);
polyB.Add(pB2);
var pB3 = GpsHelper.CreateLocationBasedOnBearingDistance(pB2, 95, 100);
polyB.Add(pB3);
var pB4 = GpsHelper.CreateLocationBasedOnBearingDistance(pB3, 185, 100);
polyB.Add(pB4);
Run Code Online (Sandbox Code Playgroud)