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

时间:2014-07-17 01:51:41

标签: python graph matplotlib geometry intersection

我正在处理一个问题,涉及创建一个图表,该图表显示三个或更多圆圈的交叉区域(每个圆圈的大小相同)。我有很多套圆圈,每套圆圈至少包含三个圆圈。如果它存在,我需要绘制集合中每个圆的内部共同的区域。如果没有区域中集合中的所有圆相交,我没有任何图形。因此,最终产品是一个图形,几乎没有交叉圆圈的“细长”。

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

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

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

如果有人对这些语言有很好的了解,我也熟悉Java和C ++。谢谢!

1 个答案:

答案 0 :(得分:1)

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

  1. 找到距离小于其半径之和的圆对;他们相交了。

  2. 通过简单的三角函数计算交点角度。

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

  4. 收集PathCollection

  5. 的路径

    这些步骤都不应该很长或很难。