%BEZIER Bezier curve 
% evaluates a point along a Bezier curve
%
% Syntax:  P = bezier(u, CP)
%
% Inputs:
%    u - parameter along the curve 0 <= u <= 1
%    CP - is a nxm vector of n control points in m-space, eg. [x y z
%                                                              x y z
%                                                               ... ]
% Outputs:
%    P - a 1xm vector giving the point on the curve, eg. [x,y,z] 
%
% See also: PLOTBEZIER

% Author: Travis Hydzik
% Last revision: 20 October 2004

function P = bezier(u, CP)

    if u < 0 || u > 1   
        error('u must be between 0 and 1');
    end

    [N, m] = size(CP);
    n = N - 1;
    P = zeros(1, m);
    
    for i = 0:n
        P = P + nchoosek(n,i) * u^i*(1 - u)^(n-i) * CP(i + 1,:);
    end