【问题标题】:Does the polygon intersection code in CGAL always use GMP's rational number library?CGAL 中的多边形交集代码是否总是使用 GMP 的有理数库?
【发布时间】:2017-02-22 15:35:14
【问题描述】:

我目前正在确定两个多边形是否相互交叉。我在 CGAL 的文档网页中找到了一个示例: http://doc.cgal.org/latest/Boolean_set_operations_2/Boolean_set_operations_2_2do_intersect_8cpp-example.html

但是,此代码使用 GMP 的有理数库,因此速度相对较慢。在我的问题中,我需要数千次确定多边形的交集。因此,我想知道是否有一种只使用浮点运算的替代方案,以便它可以运行得更快? 非常感谢。

【问题讨论】:

  • 我不是特别了解这个包,但是涉及 Epeck 的大多数操作都是惰性的,即它们首先以双倍间隔完成,并且只在少数需要的地方转向 GMP。它肯定比基于 Epick 的东西慢,但不如直接使用有理数 (Simple_cartesian) 进行所有计算那么慢。

标签: computational-geometry gmp cgal polygons


【解决方案1】:

CGAL 声明:“CGAL 将浮点算术与精确算术相结合,以提高效率和可靠性。CGAL 有一个内置的数字类型,但 Gmp 和 Mpfr 提供了更快的解决方案,我们建议使用它们。” (1) 同样根据我的经验,这就是 CGAL 的用途,精确计算。

如果您使用 CGAL 是因为它直接提供多边形相交功能,那么也许可以使用替代库。以下是来自alternative thread 的一些内容。

最后一个想法。您还可以在 CGAL 中加速您的代码。在您的情况下,我建议为每个多边形计算边界框,然后首先对它们进行交叉测试。它已经消除了很多多边形对。

【讨论】:

  • 好主意!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多