是否存在有效的算法来确定两个可能非凸多边形的边之间的交点?

发布于 2024-11-02 19:33:44 字数 343 浏览 5 评论 0原文

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

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

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

如果是,请告诉我该算法的名称算法,如果没有 - 一些证明它是不可能的资源。

Here's the task I'm trying to solve:
Given a polygon A with N vertices and a polygon B with M vertices, find all intersections between a segment in A and a segment in B.
Both A and B may be non-convex.

So far, I have implemented the obvious solution(check every edge in A with every edge in B, O(M*N)).
Now, for certain polygons it is in fact possible that there are (almost) M*N intersections, so the worst case for any such algorithm is O(M*N).

My question is:
Does there exist an algorithm for determining the points of intersection between two non-convex polygons with complexity in the average case that is lower than O(N*M)

If yes, then please give me the name of the algorithm, if no - some resource that proves it to be impossible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

℡寂寞咖啡 2024-11-09 19:33:45

摘自有关 Greiner-Hormann 的论文 (PDF) 多边形裁剪算法:

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

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

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

对“众所周知”结果的引用是:

[7] FP Preparata 和 MI Shamos。
计算几何:
介绍。文本和专着
计算机科学。纽约州施普林格,
1985 年。

这是一篇关于线扫描算法的论文

Excerpt from a paper on the Greiner-Hormann (PDF) polygon clipping algorithm:

... if we have a
polygon with n edges and another with
m edges, the number of intersections
can be nm in the worst case. So the
average number of intersections grows
on the order of O(nm).

There is a
well-known result in computational
geometry based on the plane sweep
algorithm, which says that if there
are N line segments generating k
intersections, then these
intersections can be reported in time
O((N+k) log(N)) [7]. Note that this
relation yields an even worse
complexity in the worst case.

I believe N in the second paragraph is m + n from the first paragraph. The average time depends the average value of k, the number of intersections. If there are only a handful of intersections the time goes to O(N log N).

The reference to the "well-known" result is:

[7] F. P. Preparata and M. I. Shamos.
Computational Geometry: An
Introduction. Texts and Monographs in
Computer Science. Springer, New York,
1985.

Here's a paper on the line sweep algorithm.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文