我想计算在Python中定义两个交叉圆的点。请参阅下面我想要计算的点的图表。
我有以下算法来计算定义一个圆的点:
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答案可以。
答案 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
更有效的方法 - 计算交叉点角度并仅扫描所需的角度范围。