in common/spline.py [0:0]
def reparameterize(self, points_per_unit, smoothing_factor):
"""
Reparameterize this spline to have equal-length segments.
"""
if self.closed:
# Round to nearest integer
num_steps = int(np.ceil(self.length() * points_per_unit))
dists = np.linspace(0, self.length(), num_steps, endpoint=False)
else:
# Shorten the spline a little bit
dists = np.arange(0, self.length(), step=1/points_per_unit)
points = self.interpolate(dists)
points_smooth = scipy.ndimage.filters.gaussian_filter1d(points.T, points_per_unit*smoothing_factor).T
new_spline = Spline(points, closed=self.closed)
new_spline._compute_tangents(points_smooth)
for track_name, track_val in self.tracks.items():
if track_name in ['tangent', 'curvature']:
continue
new_track = self.interpolate(dists, track=track_name)
if track_val[1] == 'linear':
new_track = scipy.ndimage.filters.gaussian_filter1d(new_track.T, points_per_unit*smoothing_factor).T
new_spline.add_track(track_name, new_track, interp_mode=track_val[1])
return new_spline