如何计算Python中定义两个交叉圆的所有点?

时间:2016-11-11 18:00:59

标签: python geometry

我想计算在Python中定义两个交叉圆的点。请参阅下面我想要计算的点的图表。

enter image description here

我有以下算法来计算定义一个圆的点:

def get_circle_points(x_center, y_center, radius, n=20):
    xpoints = []
    ypoints = []
    for i in range(0, n+1):
        x = math.cos(2*math.pi/n*i) * radius + x_center
        y =  math.sin(2*math.pi/n*i) * radius + y_center
        xpoints.append(x)
        ypoints.append(y)
    return xpoints, ypoints

一个重要的限制是我无法导入numpy,只有纯Python答案可以。

1 个答案:

答案 0 :(得分:1)

非常简单的方法(有一些过度的计算):

获取开始角度

sa = atan2(yc2-yc1, xc2-xc1)  

生成角度范围sa..sa + 2*Pi

中的第一个圆点

检查 - 如果点(px,py)在第二个圆圈之外,将其添加到结果列表(px-cx2)^2+(py-cy2)^2 > r2^2

生成角度范围sa - Pi..sa + Pi

中的第二个圆点

检查 - 如果点(px,py)在第一个圆圈之外,将其添加到结果列表(px-cx1)^2+(py-cy1)^2 > r1^2

更有效的方法 - 计算交叉点角度并仅扫描所需的角度范围。