这个问题是这个问题一些计算细节的扩展。
假设有一组(可能重叠的)圆,希望计算出此组圆覆盖的面积。(为简单起见,可以假设已经进行了一些预处理步骤,例如消除完全包含在其他圆中的圆,以及这些圆形成一个连通分量。)
我想也许可以运行一个拉斯维加斯风格的算法,取随机点,如果该点在圆的交点上,则尝试计算相应的多边形。如果存在这样的多边形,则删除组成该多边形的圆心和交点。重复直到没有圆心或交点剩余。 这将避免最终计算“外”多边形或“内”多边形,但会引入新问题(除了潜在的高运行时间之外),例如:多于2个圆在单个交点相交时,在计算一个多边形时可能会删除该交点,但对于下一个圆仍然是必要的。
最终,我的问题是:如何计算这些多边形? PS:在计算多边形后作为奖励问题,如何知道在θ和2PI-θ之间计算某个圆切片的面积时考虑哪个角度?
假设有一组(可能重叠的)圆,希望计算出此组圆覆盖的面积。(为简单起见,可以假设已经进行了一些预处理步骤,例如消除完全包含在其他圆中的圆,以及这些圆形成一个连通分量。)
其中一种方法提到了Ants Aasma和Timothy Shields的答案,即重叠圆形区域只是圆片和多边形的集合,这两者的面积都很容易计算。
然而,我遇到的问题是计算这些多边形。多边形的节点(由圆心和“外部”交点组成)很容易计算:
起初我认为一个简单的算法,随机选择一个节点并按顺时针顺序访问邻居节点就足够了,但这可能会导致构建以下“外部”多边形,而这不是正确多边形的一部分。
所以我考虑了不同的方法。广度优先搜索来计算最小循环,但我认为之前的反例很容易被修改,使得这种方法导致包含孔的“内”多边形(因此不是正确的多边形)。我想也许可以运行一个拉斯维加斯风格的算法,取随机点,如果该点在圆的交点上,则尝试计算相应的多边形。如果存在这样的多边形,则删除组成该多边形的圆心和交点。重复直到没有圆心或交点剩余。 这将避免最终计算“外”多边形或“内”多边形,但会引入新问题(除了潜在的高运行时间之外),例如:多于2个圆在单个交点相交时,在计算一个多边形时可能会删除该交点,但对于下一个圆仍然是必要的。
最终,我的问题是:如何计算这些多边形? PS:在计算多边形后作为奖励问题,如何知道在θ和2PI-θ之间计算某个圆切片的面积时考虑哪个角度?