Cela ressemble à un shell et je me souviens de l'avoir écrit partout. Je l'ai dessiné avec du python.
python
import matplotlib.pyplot as plt
import numpy as np
def cir_th2p(x,y,p1,p2,r,inv=False):
def cal_center(p,q,r):
pt3 = (p + q) * 0.5
r =r**2
l1 = (q[0] - pt3[0])**2 + (q[1] - pt3[1])**2
d = np.sqrt(r / l1 - 1.0)
dy,dx= d * (q - pt3)
pc1 = [pt3[0] + dx, pt3[1] - dy]
pc2 = [pt3[0] - dx, pt3[1] + dy]
return pc1,pc2
def cir_eq(x,y,a,b,r):
return (x-a)**2+(y-b)**2-r**2
r=float(r)
p1=np.array(p1).astype("float")
p2=np.array(p2).astype("float")
center=cal_center(p1,p2,r)
if inv:center=center[0]
else:center=center[1]
return cir_eq(x,y,center[0],center[1],r)
delta = 0.1
xrange = np.arange(-3, 3, delta)
yrange = np.arange(-3, 3, delta)
X, Y = np.meshgrid(xrange,yrange)
x=np.logspace(np.log10(1) , np.log10(5) , num=5)
for i in x:
plt.contour(X, Y, cir_th2p(X,Y,(-0.5,-0.5),(1,0),i),[0])
plt.contour(X, Y, cir_th2p(X,Y,(-0.5,-0.5),(1,0),i,inv=True),[0])
plt.gca().set_aspect('equal', adjustable='box')
plt.savefig("c.pdf",bbox_inches='tight')
cir_th2p(x,y,p1,p2,r,inv=False):
x
xy
yp1
Le premier point. Il est donné aux coordonnées de (x, y).p2
Seconde.r
Je voulais écrire cette fonction un peu plus élégamment, mais j'étais pressé, c'est donc devenu une implémentation de force brute. Je vais l'organiser quand j'en ai envie.