close all
clear all
clc

% Punti del poligono di controllo (in mm)
xpunti = [  0 0 20 38  38 38  38 30  28  32  36  39  40  38  31  24  24 26 26 17  17  12   6   5   6  12  14 16 10  4    4   0];
ypunti = [-11 0  0  0   0 -6  -6 -6 -21 -24 -23 -19 -19 -22 -29 -23 -16 -6 -6 -6 -22 -29 -28 -23 -19 -16 -11 -6 -6 -6  -11 -11];
ypunti = ypunti - min(ypunti)
punti = [xpunti; ypunti];
np = size(punti,2);

uvalue = linspace(0,1,1001);
p = 3;              % grado del polinomio delle B-Spline
ndiv = np-p+1;      % numero di suddivisioni 
U = [repmat(0,1,p),linspace(0,1,ndiv),repmat(1,1,p)]
kmax = length(U)-p-1;

Nip = zeros(length(uvalue),kmax);
for k=1:kmax,
    for i=1:length(uvalue),
        u = uvalue(i);
        Nip(i,k) = BSplineEval(k,p,U,u);
    end
end

Cx = zeros(length(uvalue),1);
Cy = zeros(length(uvalue),1);
for k=1:kmax,
    Cx = Cx+Nip(:,k)*punti(1,k);
    Cy = Cy+Nip(:,k)*punti(2,k);
end

figure;
h = plot(punti(1,:),punti(2,:),'ro--');
set(h,'LineWidth',2);
hold on;
h = plot(Cx,Cy,'b');
set(h,'LineWidth',2);
hold off;
axis off
axis equal


figure;
hold on;
fill(Cx,Cy,'k');
hold off;
axis off

