Representación de spline suave de un contorno arbitrario, f (longitud) -> x, y

Supongamos que tengo un conjunto de coordenadas x, y que marcan puntos a lo largo del contorno. ¿Hay alguna manera de poder construir una representación de spline del contorno que pueda evaluar en una posición particular a lo largo de su longitud y recuperar las coordenadas x, y interpoladas?

A menudo no es el caso que haya una correspondencia 1: 1 entre los valores de X e Y, por lo que las splines univariadas no son buenas para mí. Las splines bivariadas estarían bien, pero hasta donde puedo decir todas las funciones para evaluar splines bivariadas enscipy.interpolate tome los valores de x, y y devuelva z, mientras que necesito dar z y devolver x, y (dado que x, y son puntos en una línea, cada z se asigna a una única x, y).

Aquí hay un bosquejo de lo que me gustaría poder hacer:

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)

Respuestas a la pregunta(3)

Su respuesta a la pregunta