- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我要解决的任务:
给定一个有 N 个顶点的多边形 A 和一个有 M 个顶点的多边形 B,找到 A 中的线段和 B 中的线段之间的所有交点。
A 和 B 都可以是非凸的。
到目前为止,我已经实现了明显的解决方案(检查 A 中的每条边和 B 中的每条边,O(M*N))。
现在,对于某些多边形,实际上可能有(几乎)M*N 个交点,因此任何此类算法的最坏情况都是 O(M*N)。
我的问题是:
是否存在一种算法来确定两个非凸多边形之间的交点,平均情况下的复杂度低于 O(N*M)
如果是,请给我算法的名称,如果不是 - 一些证明它不可能的资源。
最佳答案
摘自 paper on the Greiner-Hormann (PDF)多边形裁剪算法:
... 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.
我相信第二段中的 N 是第一段中的 m + n。平均时间取决于 k 的平均值,即交叉点的数量。如果只有少数交叉路口,则时间变为 O(N log N)。
对“知名”结果的引用是:
[7] F. P. Preparata and M. I. Shamos. Computational Geometry: An Introduction. Texts and Monographs in Computer Science. Springer, New York, 1985.
关于geometry - 是否存在一种有效的算法来确定两个可能非凸多边形的边之间的交点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5769431/
下面的问题是二维的,所以建议答案时可以做一些简化。 我需要从一组点/线段创建封闭区域(由线段或仅由一组点定义 - 凸多边形)。 基本上我使用 Voronoi 生成“道路”。然后我更改了一些数据。现在我
我有一个由点和三角形组成的凸多面体(三角形的法线在多边形之外): 输入结构为: class Vector { float X, Y, Z; }; class Triangle { int po
我有一个用点表示的凸多边形。点由x 坐标数组 和y 坐标数组 表示。 例如: X = {6, 1, 5, 0, 3} Y = {4, 0, 0, 4, 6} 如何按顺时针排序这些点?点数并不总是相同,
我是一名优秀的程序员,十分优秀!