function y = decasteljau (b, t)
%
% function y = decasteljau (b, t)
%
% Algoritmo di De Casteljau. I punti di controllo b sono in una
% matrice di dimensione d x (n + 1), dove d vale 1, 2 oppure 3.
% In output, y{i} = b_i^(n-i+1), i = 1,2, ..., n + 1, con y{1}(1,:)
% che contiene la prima coordinata della curva di Bezier e y{1}(d,:) l'ultima.
d = size (b, 1);
n = size (b, 2) - 1;
% preparo i b_i^0(t)
y = reshape (repmat (b, length (t), 1), d, length (t) * (n + 1));
y = mat2cell (y, d, ones (1, n + 1) * length (t));
t = t(:)';
t = repmat (t, d, 1);
for r = 1:n
  for i = 1:n - r + 1
    y{i} = (1 - t) .* y{i} + t .* y{i+1};
  end
end
%!demo
%! t = linspace(0,1,101);
%! n = 4;
%! b = rand(2,n+1);
%! y = decasteljau(b,t);
%! B = bezier(b,t);
%! plot(y{1}(1,:),y{1}(2,:),'o',B(1,:),B(2,:))
%! hold on
%! plot(b(1,:),b(2,:),'*')
%! legend('de Casteljau','curva di Bezier','punti di controllo')
