【发布时间】:2012-08-02 10:18:40
【问题描述】:
给定同一个圆的两个圆段:A=[a1, a2] 和 B=[b1, b2],其中:
- a1、a2、b1、b2 值在 -inf 和 +inf 之间的度数
- a1
- a2-a1
如何确定这两个圆段是否重叠? (即如果它们至少有一点相交或接触)
例子:
A=[ -45°, 45°]; B=[ 10°, 20°] ==> overlap
A=[ -45°, 45°]; B=[ 90°, 180°] ==> no overlap
A=[ -45°, 45°]; B=[ 180°, 360°] ==> overlap
A=[ -405°, -315°]; B=[ 180°, 360°] ==> overlap
A=[-3600°, -3601°]; B=[ 3601°, 3602°] ==> overlap (touching counts as overlap)
A=[ 3600°, 3601°]; B=[-3601°,-3602°] ==> overlap (touching counts as overlap)
A=[ -1°, 1°]; B=[ 3602°, 3603°] ==> no overlap
这看起来是一个看似简单的问题,但我无法理解它。 我目前有一个解决方案的基本想法,如果每个部分超过 0°,则将其分成两部分,但我不确定这是否涵盖所有情况,我想知道是否有一个优雅的公式。
【问题讨论】:
-
如果你没有指定圆的半径或中心,我们是否假设弧在同一个圆上?
-
@HighPerformanceMark 我不认为其他问题是重复的。该问题的答案涉及对数组进行排序和管理相邻段的列表。
-
@Chris 是的,这些段在同一个圆圈上;我在正文中有,但标题可能不清楚,我修改了问题标题以反映这一事实
-
@HighPerformanceMark 我刚刚看到你修改了链接;另一个问题看起来确实相关,认为它们似乎只有 0° 到 360° 之间的角度。答案似乎与我拆分段的基本想法相似,我很想知道这是否确实是解决我的问题的有效解决方案,以及是否有更好的解决方案?
标签: algorithm language-agnostic geometry 2d angle