2013-01-09 35 views
9

Tôi có một quỹ đạo được hình thành bởi một chuỗi các cặp (x, y). Tôi muốn nội suy các điểm trên quỹ đạo này bằng cách sử dụng splines.scipy: Interpolating quỹ đạo

Làm cách nào để thực hiện việc này? Sử dụng scipy.interpolate.UnivariateSpline không hoạt động vì không phải x cũng không phải y là đơn điệu. Tôi có thể giới thiệu một tham số (ví dụ: chiều dài d dọc theo quỹ đạo), nhưng sau đó tôi có hai biến phụ thuộc x (d)y (d).

Ví 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

+0

@alinsoar: dữ liệu (x, y) trong ví dụ này không làm gì? – Nikratio

Trả lời

11

Sử dụng splprep bạn có thể suy trên đường cong của bất kỳ hình học.

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) 

Sản xuất đồ thị như được chỉ định, nhưng chỉ sử dụng điểm x và y chứ không phải chỉ số alpha và r. Same as yours only using x and y points.

Xin lỗi về câu trả lời ban đầu của tôi, tôi đã đọc sai câu hỏi.