Code covered by the BSD License  

Highlights from
interparc

Be the first to rate this file! 34 Downloads (last 30 days) File Size: 6.8 KB File ID: #34874
image thumbnail

interparc

by John D'Errico

 

01 Feb 2012 (Updated 04 Mar 2012)

Distance based interpolation along a general curve in space

| Watch this File

File Information
Description

A common request is to interpolate a set of points at fixed distances along some curve in space (2 or more dimensions.) The user typically has a set of points along a curve, some of which are closely spaced, others not so close, and they wish to create a new set which is uniformly spaced along the same curve.

When the interpolation is assumed to be piecewise linear, this is easy. However, if the curve is to be a spline, perhaps interpolated as a function of chordal arclength between the points, this gets a bit more difficult. A nice trick is to formulate the problem in terms of differential equations that describe the path along the curve. Then the interpolation can be done using an ODE solver.

As an example of use, I'll pick a random set of points around a circle in the plane, then generate a new set of points that are equally spaced in terms of arc length along the curve, so around the perimeter of the circle.

theta = sort(rand(15,1))*2*pi;
theta(end+1) = theta(1);
px = cos(theta);
py = sin(theta);
 
100 equally spaced points, using a spline interpolant.

pt = interparc(100,px,py,'spline');

% Plot the result
plot(px,py,'r*',pt(:,1),pt(:,2),'b-o')
axis([-1.1 1.1 -1.1 1.1])
axis equal
grid on
xlabel X
ylabel Y
title 'Points in blue are uniform in arclength around the circle'

You can now also return a function handle to evaluate the curve itself at any point. As well, CSAPE is an option for periodic (closed) curves, as long as it is available in your matlab installation.

[~,~,foft] = interparc([],px,py,'spline');
foft(0:0.25:1)
ans =
      0.98319 0.18257
     -0.19064 0.98151
     -0.98493 -0.17486
      0.18634 -0.98406
      0.98319 0.18257

Required Products MATLAB
MATLAB release MATLAB 7.12 (2011a)
Other requirements Earlier releases will work as well.
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Please login to add a comment or rating.
Updates
04 Mar 2012

Add csape for periodic fits, and return a function handle for external evaluation.

Tag Activity for this File
Tag Applied By Date/Time
interpolation John D'Errico 17 Mar 2012 06:37:35
spline John D'Errico 17 Mar 2012 06:37:35
linear John D'Errico 17 Mar 2012 06:37:35
cubic John D'Errico 17 Mar 2012 06:37:35
parametric John D'Errico 17 Mar 2012 06:37:35
arc length John D'Errico 17 Mar 2012 06:37:35
distance John D'Errico 17 Mar 2012 06:37:35
equal spacing John D'Errico 17 Mar 2012 06:37:35

Contact us at files@mathworks.com