Python scipy:插值轨迹

Python scipy:插值轨迹,python,interpolation,spline,Python,Interpolation,Spline,我有一个由(x,y)对序列组成的轨迹。我想用样条曲线在这个轨迹上插值点 我该怎么做?使用scipy.interpolate.UnivariateSpline不起作用,因为x和y都不是单调的。我可以引入一个参数化(例如沿轨迹的长度d),但是我有两个因变量x(d)和y(d) 例如: import numpy as np import matplotlib.pyplot as plt import math error = 0.1 x0 = 1 y0 = 1 r0 = 0.5 alpha = np

我有一个由(x,y)对序列组成的轨迹。我想用样条曲线在这个轨迹上插值点

我该怎么做?使用
scipy.interpolate.UnivariateSpline
不起作用,因为x和y都不是单调的。我可以引入一个参数化(例如沿轨迹的长度d),但是我有两个因变量x(d)和y(d)

例如:

import numpy as np
import matplotlib.pyplot as plt
import math

error = 0.1
x0 = 1
y0 = 1
r0 = 0.5

alpha = np.linspace(0, 2*math.pi, 40, endpoint=False)
r = r0 + error * np.random.random(len(alpha))
x = x0 + r * np.cos(alpha)
y = x0 + r * np.sin(alpha)
plt.scatter(x, y, color='blue', label='given')

# For this special case, the following code produces the
# desired results. However, I need something that depends
# only on x and y:
from scipy.interpolate import interp1d
alpha_i = np.linspace(alpha[0], alpha[-1], 100)
r_i = interp1d(alpha, r, kind=3)(alpha_i)
x_i = x0 + r_i * np.cos(alpha_i)
y_i = x0 + r_i * np.sin(alpha_i)
plt.plot(x_i, y_i, color='green', label='desired')

plt.legend()
plt.show()

使用splprep,您可以在任何几何体的曲线上插值

from scipy import interpolate
tck,u=interpolate.splprep([x,y],s=0.0)
x_i,y_i= interpolate.splev(np.linspace(0,1,100),tck)
这将生成一个与给定图类似的图,但仅使用x和y点,而不使用alpha和r参数。


很抱歉我的原始答案,我误读了这个问题。

@alinsoar:示例中的(x,y)数据无效?是否有方法控制连接的厚度?