擅长:python、mysql、java
<p>可以从2个边点绘制直线,并计算该直线中间到曲线的距离(<code>dh</code>)。然后,如果<code>dl</code>是边点之间的距离,则可以从该等式中写入<code>(dl/2)^2 = (2R - dh) * dh</code>并获得<code>R</code></p>
<pre><code>a = df.to_numpy()
x_middle = (a[0, 0] + a[-1, 0]) / 2
y_middle = (a[0, 1] + a[-1, 1]) / 2
dx = a[-1, 0] - a[0, 0]
dy = a[0, 1] - a[-1, 1]
dl = np.sqrt(dx ** 2 + dy ** 2)
cos = dx / dl
sin = dy / dl
dh = cos * (np.interp(x_middle, a[:, 0], a[:, 1]) - y_middle)
R = dl ** 2 / 8 / dh + dh / 2
x0 = x_middle - (R - dh) * sin
y0 = y_middle - (R - dh) * cos
plt.scatter(a[:, 0], a[:, 1])
circle = plt.Circle((x0, y0), R, fill=False)
plt.gca().add_artist(circle)
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/i12zV.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/i12zV.png" alt="plot"/></a></p>