File Exchange

image thumbnail

Bezier Curve Function

version 1.0.0.0 (1.37 KB) by Prakash Manandhar
Vectorized function to calculate Bezier Curve

3 Downloads

Updated 02 Feb 2012

View License

This function constructs a Bezier curve from given control points. P is a vector of control points. N is the number of points to calculate.

Example:

P = [0 0; 1 1; 2 5; 5 -1];
x = (0:0.0001:5);
y = BezierCurve(length(x), P);
plot(x, y, P(:, 1), P(:, 2), 'x-', 'LineWidth', 2); set(gca, 'FontSize', 16)

Cite As

Prakash Manandhar (2019). Bezier Curve Function (https://www.mathworks.com/matlabcentral/fileexchange/34902-bezier-curve-function), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (4)

Jason Kurtz

Here is modified code that works. Note that the function now returns two sets of variables.

function [x y] = BezierCurve(N, P)
% This function constructs a Bezier curve from given control points. P is a
% vector of control points. N is the number of points to calculate.
%
% Example:
%
% P = [0 0; 1 1; 2 5; 5 -1];
% y = BezierCurve(1000, P);
% plot(x, y, P(:, 1), P(:, 2), 'x-', 'LineWidth', 2); set(gca, 'FontSize', 16)
%
% Prakash Manandhar, pmanandhar@umassd.edu

Np = size(P, 1);
u = linspace(0, 1, N);
B = zeros(N, Np);
for i = 1:Np
B(:,i) = nchoosek(Np-1,i-1).*u.^(i-1).*(1-u).^(Np-i); %B is the Bernstein polynomial value
end
S = B*P;
x = S(:, 1);
y = S(:, 2);

Gaute Hope

Yes, there is a problem with this function.

Joey

Joey

I don't understand the math well enough to pick out exactly what's wrong, but the curve that this code gives for certain sets of points is definitely not right.

Try this and you'll see:
P = [0 2; 4.38 6.38; 5.32 5.32; 9.7 9.7];
x = (0:0.01:9.7);
y = BezierCurve(length(x), P);
plot(x, y, P(:, 1), P(:, 2), 'x-', 'LineWidth', 2); set(gca, 'FontSize', 16)

http://img685.imageshack.us/img685/9228/badcurve.jpg

MATLAB Release Compatibility
Created with R2010b
Compatible with any release
Platform Compatibility
Windows macOS Linux
Acknowledgements

Inspired by: Bezier Curve Plotter