我有一组(x,y)值,这些值不是等距的。 此处 是本问题中使用的归档。
我能够在这些值之间进行插值,但我得到的插值点不是等间距的。我所做的是:
x_data = [0.613,0.615,0.615,...]
y_data = [5.919,5.349,5.413,...]
# Interpolate values for x and y.
t = np.linspace(0, 1, len(x_data))
t2 = np.linspace(0, 1, 100)
# One-dimensional linear interpolation.
x2 = np.interp(t2, t, x_data)
y2 = np.interp(t2, t, y_data)
# Plot x,y data.
plt.scatter(x_data, y_data, marker='o', color='k', s=40, lw=0.)
# Plot interpolated points.
plt.scatter(x2, y2, marker='o', color='r', s=10, lw=0.5)
这导致结果如下:
如图所示,在原始点分布更密的图形部分,红点彼此更接近。
我需要一种方法来生成插值点,使其在x、y方向上 等距,步长给定为0.1。
正如 askewchan 正确指出的那样,当我说"等距在x,y时,我的意思是曲线中两个相邻的插值点之间应该有相同的距离(欧几里得直线距离)。
我尝试了unubtu的答案,对于平滑曲线效果很好,但对于不太平滑的曲线似乎会出现问题:
发生这种情况是因为代码以欧几里得方式计算点距离,而不是直接在曲线上进行计算,我需要距离曲线上的点之间的距离相同。有什么方法可以解决这个问题吗?
y(x)
的函数,并在一些非线性间隔的数组x
上调用它,但步长(dx)应该是所需步长(ds)除以根号下 (1 + 斜率平方)。这是因为曲线段的弧长长度为 ds = sqrt(1 + slope^2)*dx (使用勾股定理 ds^2 = dx^2 + dy^2)。 - askewchan