import numpy as np import matplotlib.pyplot as plt import math def get_intersections(x0, y0, r0, x1, y1, r1): # circle 1: (x0, y0), radius r0 # circle 2: (x1, y1), radius r1 d=math.sqrt((x1-x0)**2 + (y1-y0)**2) # non intersecting if d > r0 + r1 : return None # One circle within other if d < abs(r0-r1): return None # coincident circles if d == 0 and r0 == r1: return None else: a=(r0**2-r1**2+d**2)/(2*d) h=math.sqrt(r0**2-a**2) x2=x0+a*(x1-x0)/d y2=y0+a*(y1-y0)/d x3=x2+h*(y1-y0)/d y3=y2-h*(x1-x0)/d x4=x2-h*(y1-y0)/d y4=y2+h*(x1-x0)/d return (x3, y3, x4, y4) x = np.linspace(-10.0, 8.0, 100) y = np.linspace(-10.0, 8.0, 100) X, Y = np.meshgrid(x,y) x0 = 1 y0 = -2 r0 = math.sqrt(18.0) F1 = (X-x0)**2 + (Y-y0)**2 - r0**2 x1 = -3 y1 = 1 r1 = math.sqrt(36.0) F2 = (X-x1)**2 + (Y-y1)**2 - r1**2 F3 = 8*X - 6*Y - 13 x3, y3, x4, y4 = get_intersections(x0, y0, r0, x1, y1, r1) fig, ax = plt.subplots(1) ax.contour(X, Y, F1, [0]) ax.contour(X, Y, F2, [0]) ax.contour(X, Y, F3, [0]) plt.plot(x3, y3, marker="o", markersize=10, markeredgecolor="red", markerfacecolor="green") plt.plot(x4, y4, marker="o", markersize=10, markeredgecolor="red", markerfacecolor="green") plt.text(x3 + 0.5, y3 + 0.1, 'P') plt.text(x4 + 0.0, y4 - 1.0, 'Q') ax.set_aspect(1) plt.savefig("ex398.png", dpi=100) plt.show()
pdf – how to find an equation of the common chord of two intersected circles.
Recent Comments