【问题标题】:Does an efficient algorithm exist to determine the points of intersection between the edges of two possibly non-convex polygons?是否存在一种有效的算法来确定两个可能非凸多边形的边缘之间的交点?
【发布时间】:2011-04-24 08:08:21
【问题描述】:

这是我要解决的任务:
给定一个具有 N 个顶点的多边形 A 和一个具有 M 个顶点的多边形 B,找出 A 中的线段与 B 中的线段之间的所有交点。
A 和 B 都可以是非凸的。

到目前为止,我已经实现了明显的解决方案(检查 A 中的每条边与 B 中的每条边,O(M*N))。
现在,对于某些多边形,实际上可能存在(几乎)M*N 个交叉点,因此任何此类算法的最坏情况是 O(M*N)。

我的问题是:
是否存在一种算法来确定两个非凸多边形之间的交点,在平均情况下的复杂度低于 O(N*M)

如果是,那么请给我算法的名称,如果不是 - 一些证明它是不可能的资源。

【问题讨论】:

标签: geometry polygon


【解决方案1】:

摘自paper on the Greiner-Hormann (PDF) 多边形裁剪算法:

...如果我们有一个 具有 n 个边的多边形和另一个具有 m边,交叉点的数量 在最坏的情况下可以是 nm。所以 平均交叉口数量增加 O(nm) 量级。

有一个 众所周知的计算结果 基于平面扫描的几何 算法,它说如果有 是 N 条线段,产生 k 路口,然后这些 路口可以及时上报 O((N+k) log(N)) [7]。请注意,这 关系产生更糟的 最坏情况下的复杂性。

我相信第二段中的 N 是第一段中的 m + n 。平均时间取决于 k 的平均值,即交叉点的数量。如果只有少数几个交叉点,则时间为 O(N log N)。

对“知名”结果的引用是:

[7] F. P. Preparata 和 M. I. Shamos。 计算几何:一个 介绍。中的文本和专着 计算机科学。斯普林格,纽约, 1985 年。

这是paper on the line sweep algorithm

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2019-11-23
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2021-07-15
    • 2018-04-08
    • 2017-09-29
    • 2012-02-02
    相关资源
    最近更新 更多