c# - 合并多边形的高效算法

标签 c# geometry

我有一个多边形列表,在这个列表中,一些多边形重叠,或者与其他多边形接触。

我的任务是合并所有相互重叠或接触的多边形。我有一个执行此操作的 union 方法。

最有效的方法是什么?我目前能想到的是遍历多边形列表,检查合并列表以查看该多边形是否已经以某种方式属于合并列表中的多边形之一,如果是,则合并它们,如果不是,则添加此多边形到合并列表的末尾。

再次重复上述步骤几次,确保所有多边形都正确组合。

这种方法看起来很不优雅;有更好的方法吗?

最佳答案

如果边界框/圆还不是 union 方法的一部分,您可以对其进行预测试,但是对于 < 1000 个左右的多边形,您的简单实现似乎没问题,甚至可能是 10000 个,具体取决于它们的复杂程度。之后可以改进的一种方法是将多边形存储在某种空间树中,例如四叉树、kd 树、bsp 树或 R 树。请注意,相对于对它们的操作,将数据放入这些树中往往代价高昂,因此在这种情况下,您将不得不在整个软件中使用它。

关于c# - 合并多边形的高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386906/

相关文章:

c# - 在 javascript 文件 .js 中访问 C# 变量

C# Labels TextAlign 在 OnPaint 覆盖后不起作用

c# - 从 Unity 3D 中按比例缩小的 UI 图像上的相对 x、y 位置获取像素

Three.js:如何在鼠标悬停时将立方体变形为球体?

c# - 我是否需要为我的 powerpoint 加载项安装 Microsoft Visual Studio 2010 Tools for Office Runtime(x86 和 x64)?

c# - 将用户控件拖放到 VS 设计器时发生 TypeLoadException

r-从数据框中同一行中的两个点创建线串

python opencv - 像素操作后的HoughCircles错误

c# - 如何找到给定纬度/经度以北 x 公里的纬度/经度?

algorithm - 线相交横向