【发布时间】:2016-07-23 22:19:34
【问题描述】:
我有一个矩形区域,其中有半径相等的圆。我想找出哪些圆圈与其他圆圈重叠(输出是重叠圆圈的 2 元素集列表)。
我知道如何检查两个圆是否重叠(它们的中心之间的距离小于直径)。我可以对每对圆执行此检查,但我想知道是否有更好的算法(比O(n^2) 更快)。
编辑
圆圈的数量通常在 100 左右,重叠不会经常发生。
这里有一些上下文: 矩形是游戏中的战场。单位的移动是小步完成的,我正在尝试检测单位之间的碰撞。
【问题讨论】:
-
好问题。 :) 在我看来你可以做某种扫描线算法。
-
嗯。 . .所有圆圈都可以与所有其他圆圈重叠。对我来说,这表明在最坏的情况下你不能比 O(n^2) 做得更好——尽管可能有启发式方法来优化它。
-
@GordonLinoff 我认为应该有一个输出敏感算法——一个运行时间与重叠数(和圈数)成正比的算法;这就是有点相关的段交叉问题的情况。
-
你的问题不够精确。什么是预期的输出 ?
n圆圈可以形成一个链条,其中任何一个都与另外两个完全重叠。这种情况下的输出是什么? -
n有多大?
标签: algorithm data-structures computational-geometry