我正在尝试为圆交点实现扫描线算法,如果圆的原点之间的欧几里德距离<=两个半径的总和,则在其中发生交点。(不包括圈内圈)
我通过将圆圈定义为具有入口和终点(上最大值和下最大值),将我的问题简化为扫描线算法。当到达最大值时,圆圈的左右最大值都将被添加到状态中。状态按圆圈最大值的 x 坐标排序。这是边界看起来如何的示例
如果它们相交,原始扫描线算法允许您在状态中切换段的索引。但在这种情况下,即使两个圆相交,它们也会在给定点之后回到原来的顺序,因为它们是圆而不是连续的线。
如果交点在圆的两半上,我也可以将交点定义为有效的交点。
我愿意就如何定义算法的交集部分提出建议。或者,如果缺少我没有注意到的东西。