Python中的曲线半径

2024-10-01 17:41:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这条曲线,我想计算下面曲线的半径和中心: enter image description here

此曲线的数据https://pastebin.com/FZTi3bAf

到目前为止,我的代码是:

poly = np.polyfit(df['x'], df['y'],2)
p = np.poly1d(poly)

我需要新的点(x,y)作为这个问题的输入


Tags: 数据代码httpscomdfnp半径中心
2条回答

可以从2个边点绘制直线,并计算该直线中间到曲线的距离(dh)。然后,如果dl是边点之间的距离,则可以从该等式中写入(dl/2)^2 = (2R - dh) * dh并获得R

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

plot

由于非圆曲线的半径显然是可变的,因此归结起来就是计算所有点与所选中心点的距离。
如果此中心点是原点,则距离仅为sqrt(x**2 + y**2),其中x, y是数据集中的特定坐标。如果中心在某个点x0, y0,那么它就变成了sqrt((x - x0)**2 + (y - y0)**2)

所有这些都可以非常方便地通过将点视为numpy阵列来实现

相关问题 更多 >

    热门问题