如何用Matplotlib找到并绘制三个以上圆的交集
我正在解决一个问题,涉及到创建一个图形,显示三个或更多圆的交集区域(每个圆的大小相同)。我有很多组圆,每组至少包含三个圆。我需要绘制每个圆内部的共同区域,如果这个区域存在的话。如果没有任何区域是所有圆的交集,那我就没有东西可以绘制。所以最终的结果是一个图形,上面有很多交叉的圆的小“片段”。
我已经用Python和matplotlib写了一个解决方案,但它的性能不太好。之前这不是问题,但现在我需要将它应用到更大的数据集上,所以我需要一个更好的解决方案。我现在的方法基本上是一个测试和检查的暴力方法:我检查一个区域内的每个点,看看它是否在那个共同的交集里(通过检查点到每个圆心的距离)。如果这个点符合条件,我就把它绘制出来,然后继续。否则,我就不绘制它,继续下一个。所以这个方法是可行的,但速度非常慢。
为了更清楚,我并不是对每组圆在整个平面上扫描每个点。首先,我把我的“搜索”区域缩小到一个紧紧围绕前两个(随便选的)圆的矩形,然后在这个区域内进行测试和检查每个点。
我在想,如果能有一种方法让我绘制每组圆中的每个圆(比如说这组有5个圆),每个圆的透明度值设为0.1。然后,我可以再回过头来,只保留透明度值为0.5的区域,因为那就是所有5个圆交集的区域,这正是我想要的。我不知道怎么用matplotlib实现这个,或者用其他任何东西实现,而不采用同样的暴力测试和检查策略。
我也熟悉Java和C++,如果有人有好的想法可以用这些语言实现的话,非常感谢!
1 个回答
也许你可以尝试一些更分析性的做法?这应该不会很难:
找出那些距离小于它们半径和的圆圈对;也就是说,它们是相交的。
通过简单的三角函数计算交点的角度。
用一个合适的小角度来画一个多边形(路径),这样一半的多边形来自一个圆,另一半来自另一个圆。
把这些路径收集到一个
PathCollection
中。
这些步骤都不应该很长或者很难。