【发布时间】:2015-11-03 13:39:46
【问题描述】:
我需要对许多凸多边形(多达数万个)应用布尔 OR 运算(也称为联合),每个多边形的顶点少于 100 个。我尝试了 Boost.Geometry(boost::geometry::union_() 函数),它需要大约 200 毫秒来合并 1500 个多边形。
我已经实现了一个简单的优化:
- 将多边形分成两组,
- 递归地将两个组合并为两个多边形集,
- 合并最后两个多边形集。
这种优化比逐个合并多边形快约 10 倍。
我需要一个算法或一个 C/C++ 库来在大约 10 毫秒内完成这样的操作。
有什么建议吗?
==== 编辑 ====
我已经用 Clipper (http://www.angusj.com/delphi/clipper.php) 替换了 Boost.Geometry,它满足了我的要求。 Clipper 可以在一次操作中合并多个多边形(Boost.Geometry 一次只能合并两个),这可能是它比 Boost.Geometry 快得多的原因。
【问题讨论】:
-
你已经对算法进行了并行化了吗?
-
@NicoSchertler 尝试并行化算法,改进可以忽略不计
-
你确定吗?你是如何实现的?
-
1500 个多边形的 20 毫秒是一个非常不错的性能!
-
@user416983,您可以将编辑移动到答案中。您可以回答自己的问题。似乎这种情况(您自己想出答案)是您被允许的完美示例。
标签: polygon computational-geometry