python - 科学 : Interpolating trajectory

标签 python interpolation spline

我有一条由 (x,y) 对序列形成的轨迹。我想使用样条在此轨迹上插入点。

我该怎么做?使用 scipy.interpolate.UnivariateSpline 不起作用,因为 xy 都不是单调的。我可以引入参数化(例如沿轨迹的长度 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()

example data

最佳答案

使用 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 参数。 Same as yours only using x and y points.

抱歉我原来的回答,我误读了问题。

关于python - 科学 : Interpolating trajectory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14244289/

相关文章:

python - BeautifulSoup get_text 不会去除所有标签和 JavaScript

python - 如何从 Python 在 Gnome 中安全地清除两个剪贴板?

java - 非单调插值方法

c++ - 机器精度

c++ - 向心 Catmull-Rom 样条如何工作?

python - 我应该如何将数据集文件夹路径放入此Python代码中

python - GAE 任务队列异常

python - 大型 3D 阵列上的快速一维线性 np.NaN 插值

svg - 是否有 SVG API 允许在生成后获取 Bezier 和 Spline 点坐标?

python - 如何在 RPy 中使用 smooth.spline 的 lambda 参数而无需 Python 将其解释为 lambda