[PYTHON] Zeichnen eines Kreises durch zwei Punkte

Ich habe mit einem Kompass gespielt, als ich in der Grundschule war

Es sieht aus wie eine Muschel und ich erinnere mich, dass ich alles neu geschrieben habe. Ich habe es mit Python gezeichnet.

c.png

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')

Hinweis

cir_th2p(x,y,p1,p2,r,inv=False):

Ich wollte diese Funktion etwas eleganter schreiben, hatte es aber eilig und wurde zu einer Brute-Force-Implementierung. Ich werde es organisieren, wenn ich Lust dazu habe.

Recommended Posts

Zeichnen eines Kreises durch zwei Punkte
Annäherung nach der Methode der kleinsten Quadrate eines Kreises mit zwei festen Punkten
Ein Beispiel zum Zeichnen von Punkten mit PIL (Python Imaging Library).