У меня есть список значений (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)
В askewchan правильно указывает, когда я имею в виду "equispaced in x, y "Я имею в виду, что две последовательные интерполированные точки на кривой должны дистанцироваться друг от друга (эвклидовое расстояние прямой линии) на одно и то же значение.
Я попытался ответить unubtu, и это хорошо работает для гладких кривых, но, кажется, перерыв не так гладкими:
Это происходит потому, что код вычисляет расстояние точки в евклидовом пути вместо прямого над кривой, и мне нужно расстояние по кривой, чтобы быть одинаковым между точками. Можно ли каким-то образом решить эту проблему?
«_equispaced_ in x, y» означает эквидистант вдоль касательной кривой? – askewchan
@askewchan извините, я выразил себя неоднозначно. Я реорганизую вопрос, чтобы сделать это более ясным. – Gabriel
Другими словами, вы хотите 'dx = step/sqrt (1 + (y ') ** 2)' – askewchan