Python代码求解两圆交点坐标
两个圆求解交点坐标
编程中经常遇到需要求两个圆交点的问题,本人结合实际遇到的问题讲述下我的解决方案。
几何图形及其辅助线
辅助线说明
AB:两圆心连线
CD:两交点连线
AE:平行x轴水平线
CF:垂直于AE竖直线
代码求解
def insec(self,p1, r1, p2, r2):
x = p1[0]
y = p1[1]
R = r1
a = p2[0]
b = p2[1]
S = r2
d = math.sqrt((abs(a - x)) ** 2 + (abs(b - y)) ** 2)
if d > (R + S) or d < (abs(R - S)):
#print("Two circles have no intersection")
return None,None
elif d == 0:
#print("Two circles have same center!")
return None,None
else:
A = (R ** 2 - S ** 2 + d ** 2) / (2 * d)
h = math.sqrt(R ** 2 - A ** 2)
x2 = x + A * (a - x) / d
y2 = y + A * (b - y) / d
x3 = round(x2 - h * (b - y) / d, 2)
y3 = round(y2 + h * (a - x) / d, 2)
x4 = round(x2 + h * (b - y) / d, 2)
y4 = round(y2 - h * (a - x) / d, 2)
c1 = [x3, y3]
c2 = [x4, y4]
return c1, c2
代码与几何对应关系
代码 | 几何图形 |
---|---|
p1 | 点A |
p2 | 点B |
(x3,y3) | 点G |
c1,c2 | 点C、点D |
d | AB |
A | AG |
h | CG |