给定一组扇区(startAngle,stopAngle)在同一个圆(0-2pi)上,我想缩小这个集合,以便合并所有重叠/相交的扇区最好,在这个过程中,我不想分割任何超过360度/2pi的扇区。
使用"check if two segments on the same circle overlap / intersect"的intersect操作,似乎可以直接比较预排序集中的每个扇区(首先是较小的startangle),并合并相交的任意两个比较扇区。然而,这种方法似乎只在跨度超过360度/2pi的扇区首先被一分为二时才起作用。
有谁能帮助我们找到一个更优雅的解决方案,而不涉及分割任何部门(最好是伪代码、Java或ADA)

最佳答案

我假设您使用(start_angle>end_angle)来标记跨越2pi的任何段如果是这种情况,则应执行以下操作:

 Add 2pi to  end_angle of segments spanning 2pi.
 Merge your segments (using your ordered start_angle method) over the range 0-4pi.
 If you only have one segment left, and start_angle > end_angle your segment covers the full circle.
 Otherwise, subtract 2pi from any angle > 2pi (there will only be one of these at most).

你将得到一个完整的圆,或者一个或多个独立的段(其中一个段可能跨越2pi)。

10-08 08:32