【问题标题】:Area of overlapping circles重叠圆的面积
【发布时间】:2014-05-31 22:17:33
【问题描述】:

我有以下 Python 代码来生成随机圆以模拟布朗运动。我需要找到红色小圆圈的总面积,以便将其与较大的蓝色圆圈的总面积进行比较。由于圆圈是随机生成的,因此其中许多圆圈重叠,因此很难找到该区域。我已经阅读了许多与此问题有关的关于像素绘画等的其他回复。找到这些圆圈面积的最佳方法是什么?我不想修改圆圈的生成,我只需要找到图上红色圆圈的总面积。

生成我需要的圆圈的代码如下(Python v. 2.7.6):

import matplotlib.pyplot as plt
import numpy as np

new_line = []
new_angle = []
x_c = [0]
y_c = [0]
x_real = []
y_real = []
xy_dist = []
circ = []   
range_value = 101

for x in range(0,range_value):
    mu, sigma = 0, 1
    new_line = np.random.normal(mu, sigma, 1)
    new_angle = np.random.uniform(0, 360)*np.pi/180
    x_c.append(new_line*np.cos(new_angle))
    y_c.append(new_line*np.sin(new_angle))

x_real = np.cumsum(x_c)
y_real = np.cumsum(y_c)
a = np.mean(x_real)
b = np.mean(y_real)

i = 0
while i<=range_value:
    xy_dist.append(np.sqrt((x_real[i]-a)**2+(y_real[i]-b)**2))
    i += 1

circ_rad = max(xy_dist)
small_rad = 0.2

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
circ1 = plt.Circle((a,b), radius=circ_rad+small_rad, color='b')
ax.add_patch(circ1)

j = 0
while j<=range_value:
    circ = plt.Circle((x_real[j], y_real[j]), radius=small_rad, color='r', fill=True)
    ax.add_patch(circ)
    j += 1

plt.axis('auto')
plt.show()

【问题讨论】:

    标签: python polygon geometry area


    【解决方案1】:

    我可以想到一个简单的方法来做它认为结果会不准确:

    使用 Python 在白色图像上绘制所有圆圈,并在绘制时填充圆圈。最后,图像的每个“像素”将具有两种颜色中的一种:白色是背景,另一种颜色(比如说红色)表示像素被一个圆圈占据。

    然后,您需要将红色像素的数量相加,然后将它们乘以绘制它们的比例。您将拥有该区域。

    这是不准确的,因为无法使用方形像素绘制圆形,因此在映射中您会失去准确性。请记住,圆圈越大,误差越小。

    【讨论】:

    • 这个问题比仅仅计算两个圆之间有多少重叠要困难得多。如果 3 个或更多圆圈在同一区域重叠怎么办?如何避免多次计算某个区域?
    • 是的,我没想到...只剩下“简单+不准确”选项
    • 虽然您实际上并不需要创建整个位图,而是可以使用扫描线方法来模拟您拥有像素行的事实。
    • 我已经删除了我的答案的错误选项,只留下了简单的选项。
    【解决方案2】:
    猜你喜欢
    • 2010-12-12
    • 2021-10-10
    • 2013-12-09
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多