Гладкое сплайн-представление произвольного контура, f (длина) -> x, y

Предположим, у меня есть набор координат x, y, которые отмечают точки вдоль контура. Есть ли способ, которым я могу построить сплайн представление контура, который я могу оценить в конкретной позиции по его длине и восстановить интерполированные координаты x, y?

Часто это не тот случай, когда между значениями X и Y существует соотношение 1: 1, поэтому одномерные сплайны мне не подходят. Двумерные сплайны были бы хороши, но, насколько я могу судить, все функции для оценки двумерных сплайнов вscipy.interpolate взять значения x, y и вернуть z, тогда как мне нужно дать z и вернуть x, y (поскольку x, y - это точки на линии, eac, h z отображается на уникальный x, y).

Вот эскиз того, что я хотел бы сделать:

import numpy as np
from matplotlib.pyplot import plot

# x,y coordinates of contour points, not monotonically increasing
x = np.array([ 2.,  1.,  1.,  2.,  2.,  4.,  4.,  3.])
y = np.array([ 1.,  2.,  3.,  4.,  2.,  3.,  2.,  1.])

# f: X --> Y might not be a 1:1 correspondence
plot(x,y,'-o')

# get the cumulative distance along the contour
dist = [0]
for ii in xrange(x.size-1):
    dist.append(np.sqrt((x[ii+1]-x[ii])**2 + (y[ii+1]-y[ii])**2))
d = np.array(dist)

# build a spline representation of the contour
spl = ContourSpline(x,y,d)

# resample it at smaller distance intervals
interp_d = np.linspace(d[0],d[-1],1000)
interp_x,interp_y = spl(interp_d)

Ответы на вопрос(3)

Ваш ответ на вопрос