File Exchange

image thumbnail

Bezier curve

version 1.4 (2.81 KB) by

Creates a Bezier curve from 2D points (up to 1000) and can create an interpolated curve from it.



View License

From any points in the plane, the program creates a Bezier curve (with eligible points) and can interpolate the generated points for any x set: the lower the number, the smoother the final curve. The user chooses whether an interpolated curve and a graph with points curves are created.
The interpolation curve can be applied to scatter or noisy xy data, in order to resample and smooth the original data.

function [bezcurve, intcurveyy] = bezier_(points, numofpbc, intcurvexx, fig)

Creates Bezier curve (output 'bezcurve') from 'points' (1st input argument) and the number of points (2nd input argument) and can create from it another interpolated curve (whose x-coordinates are in the input 'intcurvexx' and whose y-coordinates are in the output 'intcurveyy').

  points: matrix ((n+1) x 2) with the original points in xy plane
  numofpbc: number of points in the Bezier curve (by default 100)
  intcurvexx: vector with x-coordinates of the interpolation curve. If this argument does not exist or is empty, the program generates Bezier curve, but no interpolation curve
  fig: any value if you want a figure of points and curve (otherwise, do not enter 4th argument). You can enter here the representing symbol for the points (for instance, 'ks' for black squares).

  bezcurve: the Bezier curve, not interpolated, in the format [x y], i.e. a (numofpbc x 2) matrix.
  intcurveyy: vector with y-coordinates (by non-parametric interpolation from intcurvexx) of the interpolation curve; it has sense only if intcurvexx elements are monotonically increasing.

Example: x = (1:100)';
            y = 0.2*randn(size(x)) - sin(pi*x/100) + 0.5*x/100;
            points = [x y];
            bezier_(points, 500, [], 1); % Creates only the Bezier curve and represents it together with the original points
Or: bc = bezier_(points); % You want the Bezier curve (with 100 points), but no graph nor interpolated curve
Or: [bc, intcyy] = bezier_(points, 500, (1:0.1:20)', 1); % You want all the Bezier curve, the interpolation of part of it and the graph of all.

Comments and Ratings (2)

Jim K

Jim K (view profile)

James Kerns

Very good program. Wish it would allow 1000+ points of input though.



Corrected bugs in documentation.
Set the limit of 1000 points maximum.


Ordered version: now the Bezier curve is the main target, the interpolation curve is an option.
Added legends to distinguish the curves.


A few bugs and better documentation.

MATLAB Release
MATLAB 7.10 (R2010a)
Tags Add Tags

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video