【问题标题】:Algorithm for determining the set of pair visible edges between two concave polygons确定两个凹多边形之间的可见边对集合的算法
【发布时间】:2012-03-15 13:35:41
【问题描述】:

假设我们有两个不相交的凹二维多边形(A,B)。问题是找到具有以下属性的边对集合(每对由多边形 A 的一条边和多边形 B 的边组成):对中的每个项目必须彼此可见。一条边对另一条边是可见的,如果它们之间没有障碍物(图中有三种情况,用红叉标记,当这条规则被打破时)。

我知道如何使用光线和边的顶点在 O(n^2) 中解决这个问题。但是太慢了。

【问题讨论】:

  • 每对边形成一个四边形。本质上,您需要找出是否有任何其他边与该四边形相交。
  • 蛮力算法将是 O(n^3):对于每一对,您再次遍历边缘以查看该边缘是否阻塞。你是怎么做到 O(n^2) 的?
  • 这看起来像是艺术画廊问题的变体,en.wikipedia.org/wiki/Art_gallery_problem 可能会给你一些指点。

标签: algorithm computational-geometry


【解决方案1】:

我不认为它可以比 O(n^2) 更快。

见下图。有一个双曲线和两个多边形。每个多边形的顶点都在双曲线的一个分支上。

在这种情况下,两个多边形的边是成对可见的(后面的两条边除外)。那么结果集将包含 O(n^2) 对边。

【讨论】:

  • 嗯。也许可以进行一些预处理。就像游戏中用于移除隐藏表面的 BSP。
  • @innochenti 这不会改变输出的大小,这是真正的瓶颈。但是如果你修改你的问题/需求/期望的输出,可能会有更快的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多