如何在O(n + k)中获得两个简单多边形之间的所有交点

计算科学 计算几何 约束
2021-12-02 10:14:55

基本上我想解决的问题的表述非常简单。给定 2 个简单多边形(没有自相交)在O(n+k)时间内报告所有相交的边对,其中 n - 是边的总数,k - 两个多边形之间的相交数。

保持在提到的时间硬度内是非常重要的。令我惊讶的是,我几乎找不到关于这个主题的信息。多边形相交似乎是一个如此自然而重要的问题。无论如何,目前我不知道是否有可能在O(n+k)中做到这一点。

可以请人帮忙解决这个问题的下限吗?


关于我的问题的一些额外观点:

  1. 使用集合操作和相交报告(关于我的问题)进行多边形裁剪似乎是稍微不同的问题 - 找到相交边后,您将不得不收缩一个多边形,这是裁剪/集合操作的结果。
  2. 基于段相交算法的方法对我不起作用。事实证明,最坏的情况需要 O(nlogn+k)。
  3. 我并不是坚持存在具有这种硬度的算法——它可能不存在。但在这种情况下,如果有人能为我的问题提供下限证明,我将不胜感激 - 大量论文提供了一些非常有趣的算法(通常具有 O(nlogn+k) 复杂度),但由于某种原因没有提及下限.
2个回答

O(n+k)算法似乎仅限于凸多边形。我在 这里这里找到的最快的算法大约有O(nlog(n))算法。据此简单多边形相交问题是可线性时间变换为线段相交测试的,其最优界约为O(nlog(n)+k)根据这篇文章。

在一般情况下,这不能在O(n+k)时间,因为可以有多达4n2k2, 即Θ ( nk ) 交点。

但是,如果两个多边形是凸的,则可以在O(n+k)时间。

参见C 第二版中的计算几何,第 253 页,或Shamos (1978),第 116 页。