提问者:小点点

如何使用Matplotlib查找和绘制3个圆的交集


我正在研究一个问题,这个问题涉及创建一个显示三个或更多圆圈相交区域的图表(每个圆圈大小相同)。我有许多圆圈集,每个集合至少包含三个圆圈。我需要绘制集合中每个圆圈内部的公共区域,如果它存在的话。如果集合中没有所有圆圈相交的区域,我就没有什么可绘制的了。所以最终产品是一个到处都是相交圆圈的小“碎片”的图表。

我已经有了一个用matplotlibPython编写的解决方案,但它的性能不是很好。这在以前不是问题,但现在我需要将它应用于更大的数据集,所以我需要一个更好的解决方案。我目前的方法基本上是一种测试和检查蛮力方法:我检查一个区域内的各个点,看看它们是否在那个公共交叉点(通过检查从点到每个圆中心的距离)。如果这个点符合这个标准,我就绘制它并继续前进。否则,我就是不绘制它并继续前进。所以它有效,但它需要永远。

澄清一下,我不会为每一组圆扫描整个平面上的每个点。首先,我将“搜索”区域缩小到一个矩形,紧紧围绕集合中的前两个(任意选择的)圆,然后测试和检查那里的每个点。

我在想,如果有一种方法让我在一个集合中绘制每个圆(比如集合中有5个圆),每个圆的alpha值为0.1,那就太好了。然后,我可以返回并只保留alpha值为0.5的区域,因为这是所有5个圆相交的区域,这就是我想要的。我不知道如何使用matplotlib或其他任何东西来实现这一点,而不诉诸相同的蛮力测试和检查策略。

我也熟悉Java和C,如果有人对这些语言有好的想法的话。谢谢!


共1个答案

匿名用户

也许你应该尝试一些更具分析性的东西?应该不会很难:

>

  • 找出距离小于半径之和的圆对;它们相交。

    用简单的三角学计算相交角。

    在这两种情况下(多边形的一半来自一个圆,另一半来自另一个圆),通过使用适当小的三角角绘制多边形(路径)。

    收集PathCollection的路径

    没有一个步骤应该很长或很难。