小程序交医疗保险交不上:一种简单的多边形求交算法(intersection of polygons)

关于小程序交医疗保险交不上的问题,在intersection of polygons中经常遇到, 我正在寻找一个非常简单的算法来计算多边形相交 / 裁剪。也就是说,给定多边形P,Q,我希望找到包含在P和Q中的多边形T,我希望T在所有可能的多边形中是最大的。

我正在寻找一个非常简单的算法来计算多边形相交 / 裁剪。也就是说,给定多边形PQ,我希望找到包含在PQ中的多边形T,我希望T在所有可能的多边形中是最大的。

我不介意运行时间(我有几个非常小的多边形),我也可以得到多边形的交集的近似值(即,具有较少点的多边形,但仍包含在多边形的交集中)。

但对我来说,算法将是简单的(更便宜的测试),最好是短的(更少的代码)。

编辑:请注意,我希望获得一个表示相交的多边形,对于两个多边形是否相交的问题,我不需要只有一个布尔答案。

66

我明白原来的海报正在寻找一个简单的解决方案,但不幸的是真的没有简单的解决方案。

尽管如此,我最近创建了一个开源的免费软件剪辑库(用 Delphi,C ++ 和 C # 编写),它可以剪辑各种多边形(包括自相交的多边形)。

20

您可以使用多边形裁剪算法来查找两个多边形之间的交集。但是,当考虑到所有边缘情况时,这些算法往往是复杂的算法。

您可以使用自己喜欢的搜索引擎查找的多边形裁剪的一种实现是Weiler-Atherton article on Weiler-Atherton

Alan Murta 有一个多边形裁剪器GPC的完整实现。

编辑:

另一种方法是首先将每个多边形分成一组三角形,这样更容易处理。Gary H.Meisters 的双耳定理就是这样。这个page at McGill很好地解释了三角形细分。

15

如果您使用 C ++,并且不想自己创建算法,则可以使用Boost.Geometry。它使用上面提到的 Weiler-Atherton 算法的改编版本。

6

你没有给我们一个多边形的表示。所以我选择(更像是建议)一个给你:)

将每个多边形表示为一个大的凸多边形,以及需要从该大的凸多边形中“减去”的较小的凸多边形的列表。

现在给定该表示中的两个多边形,您可以将交集计算为:

计算大凸多边形的交集以形成交集的大多边形。然后“减去”两者中所有较小的交点,以获得细分多边形的列表。

你会得到一个新的多边形遵循相同的表示。

由于凸多边形相交很容易,因此查找相交也应该很容易。

这似乎应该工作,但我没有给它更深入的思考关于正确性 / 时间 / 空间复杂性。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(710)
电驴服务器列表:获取完整的服务器列表(discord server lists)
上一篇
Camera测试:跨浏览器测试与相机访问(cross browser and device testing)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(45条)