我有一个不等距的(x,y)值列表。Here是这个问题中使用的存档。
我可以在值之间进行插值,但得到的不是等距插值点。我做的是:
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)
结果是:
可以看到,在图中原始点分布更密集的部分,红点更靠近。
我需要一种方法根据给定的步长值(比如0.1)在x,y中生成插值点等间距
正如askewchan所正确指出的,当我在x,y中的意思是“等间距时,我的意思是曲线中的两个连续插值点应该以相同的值彼此相距(欧几里德直线距离)。
我尝试了unubtu的答案,它对平滑曲线很有效,但对于不太平滑的曲线似乎会中断:
这是因为代码以欧几里德方式而不是直接计算曲线上的点距离,我需要曲线上的距离在点之间是相同的。这个问题能解决吗?
下面的脚本将以相同的步骤
x_max - x_min / len(x) = 0.04438
插入点我们先来考虑一个简单的例子。假设你的数据看起来像蓝线, 下面。
如果要选择相距
r
的等距点, 那么r
就有了一些临界值,其中(1,2)处的尖点是第一个等距点。如果你想要的点要比这个临界距离大,那么 第一个等距点会从(1,2)跳到非常不同的地方-- 由绿色弧线和蓝色直线的交点描绘。这种变化不是渐进的。
这个玩具案例表明,参数
r
的微小变化可能对解产生根本的、不连续的影响。它还建议你必须知道第i个等距点的位置 才能确定第(i+1)等距点的位置。
因此,似乎需要迭代求解:
注意:我将纵横比设置为
'equal'
,以使点更明显地等距。将xy数据转换为参数化曲线,即计算点之间的所有距离,并通过累积求和在曲线上生成坐标。然后根据新的坐标独立地插入x和y坐标。
相关问题 更多 >
编程相关推荐