这很长,只是因为问题太大了。我已尝试根据您的要点对我的 cmets 进行分组。
绘制多边形的组件
我的猜测是,如果不提供更多信息,您将获得有限的成功 - 绘制多边形的组件将与您在项目的其余部分使用的语言和 UI 范例非常耦合,即。 Web 组件的代码看起来与本机组件非常不同。
也许另一种方法是将流程的这个元素与您尝试做的其他事情分开。有一些非常棒的预先存在的编辑器可用于创建 2d 和 3d 多边形。
Inkscape 是矢量图形编辑器的一个示例,它可以轻松输入 2d 多边形,并具有生成输出 SVG 的优势,它相当容易解析。
在三个维度Blender 是一个开源编辑器,可用于生成可导出为多种格式的任意几何图形。
如果您可以使用 google-maps API(可能在原生 HTML 渲染控件中),并且您有兴趣在地图叠加层上添加空间点,您可能会对相关的click-to-draw polygon question on stackoverflow 感兴趣。根据以往的经验,OpenLayers 等其他地图 API 支持类似的方法。
检查多边形是否重叠
Thomas T 在他的answer 中指出,有一系列相关谓词可用于解决此问题和相关查询。如果您实际上只是在二维中寻找重叠和其他集合理论运算(并集、交集、集差),您可以使用General Polygon Clipper
当两个多边形不重叠或不共享顶点时,您可能还需要考虑稍微更一般的问题。您可以使用 Minkowski 和来扩大(放大)二维和三维多边形以避免此类问题。 Computational Geometry Algorithms Library 具有这些算法的强大实现。
我认为您更有可能真的在寻找一款可以执行顶点焊接的软件,Christer Ericson 的书Real-time Collision Detection 包含对该领域基础知识的广泛且非常易读的描述,以及相关问题边缘捕捉、裂纹检测、T 形接头等。然而,即使那本书包含了 sn-ps 代码,我知道没有现成的库可以解决这些问题,特别是除了基本的顶点焊接之外,没有给出任何完整的实现。
显然所有 3D 软件包(blender、maya、max、rhino)都包含用于解决此问题的内置软件和工具。
根据顶点对多边形进行分组
从过去的经验来看,这是开发软件来解决该领域问题的最耗时的部分之一。它需要对图论和算法有合理的理解才能跨越边界。值得依靠实体几何或图形库为您完成繁重的工作。过去我在igraph 上取得了成功。
将更新后的多边形链接回原始多边形。
再一次,从过去的经验来看,这只是一个仔细记账的例子,并且预先对您的网格类进行了一些非常仔细的设计。我想提供更多建议,但即使在过去六个月的大部分时间都花在这上面之后,我仍然在努力寻找一种“好”的方法来做到这一点。
其他评论
如果您正在与用户交互,我强烈建议您尽可能避免此问题,方法是使用“捕捉”编辑器,将所有用户输入的点四舍五入到网格上。这有望显着减少您必须做的工作量。