Glatte Spline-Darstellung einer beliebigen Kontur, f (Länge) -> x, y

Angenommen, ich habe einen Satz von x, y-Koordinaten, die Punkte entlang der Kontur markieren. Gibt es eine Möglichkeit, eine Spline-Darstellung der Kontur zu erstellen, die ich an einer bestimmten Position entlang ihrer Länge auswerten und interpolierte x, y-Koordinaten wiederherstellen kann?

Es ist oft nicht der Fall, dass es eine 1: 1-Entsprechung zwischen X- und Y-Werten gibt, daher sind univariate Splines für mich nicht gut. Bivariate Splines wären in Ordnung, aber soweit ich das beurteilen kann, sind alle Funktionen für bivariate Splines inscipy.interpolate Nehmen Sie x, y-Werte und geben Sie z zurück, während ich z und x, y zurückgeben muss (da x, y Punkte auf einer Linie sind, wird jedes z einem eindeutigen x, y zugeordnet).

Hier ist eine Skizze dessen, was ich tun möchte:

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)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage