function narisispline(T) %narisispline(T) %narise kubicni kubicni zlepek v ravnini skozi tocke, ki podane %v stolpcih matrike 'T' (prva vrstica vsebuje x koordinate tock, druga %pa y koordinate clf; hold on plot(T(1,:),T(2,:),'ko');%narisemo tocke z crnimi krogci n=size(T,2);%stevilo tock T=[T(:,n) T T(:,1) T(:,2)];%da se resimo posebnih primeru na zacetku in koncu %postavimo kopijo zadnje tocke na zacetek, na konec pa kopiji prvih dveh %tock t=linspace(0,1);%vrednosti parametra t so ves cas med 0 in 1 for i=2:n+1 %na vsakem koraku for zanke narisemo kos zlepka, kjer upostevamo 4 tocke x0=T(1,i-1);x1=T(1,i);x2=T(1,i+1);x3=T(1,i+2);%zaradi preglednosti %izpisemo kooridnate vseh tock, ki nas zanimajo y0=T(2,i-1);y1=T(2,i);y2=T(2,i+1);y3=T(2,i+2); kx1=x1-x0;kx2=x2-x1;kx3=x3-x2;%smerni koeficienti linearnih priblizkov ky1=y1-y0;ky2=y2-y1;ky3=y3-y2; p=dolocipolinom(x1,x2,(kx1+kx2)/2,(kx2+kx3)/2);%dolocimo polinoma p in q q=dolocipolinom(y1,y2,(ky1+ky2)/2,(ky2+ky3)/2); plot(polyval(p,t),polyval(q,t));%narisemo parametricno podan kos zlepka %2. moznost je da namesto enostavnega povrpecja smernih koeficientov %odvode v robnih tocka definiramo kot utezeno povprecje smernih %odvodov, kjer so utezi obratno sorazmerne razdalji do sosednje tocke d0=norm(T(:,i-1)-T(:,i));%razdalje med sosednjimi tockami d1=norm(T(:,i)-T(:,i+1)); d2=norm(T(:,i+1)-T(:,i+2)); dx1=(kx1/d0+kx2/d1)/(1/d0+1/d1);%odvodi so utezeno povprecje dx2=(kx2/d1+kx3/d2)/(1/d1+1/d2);%utezi se morajo sesteti v 1 dy1=(ky1/d0+ky2/d1)/(1/d0+1/d1);%zato faktor na koncu dy2=(ky2/d1+ky3/d2)/(1/d1+1/d2); p=dolocipolinom(x1,x2,dx1,dx2);%dolocimo polinoma p in q q=dolocipolinom(y1,y2,dy1,dy2); plot(polyval(p,t),polyval(q,t),'r');%narisemo parametricno podan kos zlepka end