Representação de spline suave de um contorno arbitrário, f (comprimento) -> x, y

Suponha que eu tenha um conjunto de coordenadas x, y que marquem pontos ao longo do contorno. Existe uma maneira que eu possa construir uma representação spline do contorno que eu possa avaliar em uma determinada posição ao longo de seu comprimento e recuperar coordenadas x, y interpoladas?

Muitas vezes, não é o caso de haver uma correspondência de 1: 1 entre os valores X e Y, portanto as splines univariadas não são boas para mim. As splines bivariadas estariam bem, mas, tanto quanto eu posso dizer todas as funções para avaliar splines bivariadas emscipy.interpolate pegue x, y valores e retorne z, ao passo que preciso dar z e retornar x, y (como x, y são pontos em uma linha, cada z é mapeado para um único x, y).

Aqui está um esboço do que eu gostaria de poder fazer:

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)

questionAnswers(3)

yourAnswerToTheQuestion