function koch(num)
% koch(m) disegna un frattale di koch (snowflake) con m punti
% tipico m=800 autore: studente corso LDMC 2015/16
%
t=1/3;
t2=2/3;
s=1/6;
x=1/3*sin(pi/3);
K=[t 0 0; 0 t 0; s -x t;x s 0;s x 0.5; -x s x;t 0 t2;0 t 0];
dets=zeros(4,1);
for i=0:3
	dets(i+1,1)=det([K((2*i+1),1) K((2*i+1),2); K((2*i+2),1) K((2*i+2),2)]);
endfor
dets=max(dets,max(dets)/100);
dets=dets/sum(dets);
p=[0,dets(1,1),dets(1,1)+dets(2,1),dets(1,1)+dets(2,1)+dets(3,1)];
x=[1;1];
s(1,1)=x(1);
s(1,2)=x(2);
figure;
axis('equal');
for i=2:num
r=rand;
j=sum(p<r)-1;
x=[K(2*j+1,1) K(2*j+1,2); K(2*j+2,1) K(2*j+2,2)]*x+[K(2*j+1,3); K(2*j+2,3)];
s(i,1)=x(1,1);
s(i,2)=x(2,1);
w(i,1)=-s(i,2);
w(i,2)=-s(i,1);
h(i,1)=cos(pi/6)*w(i,1)-sin(pi/6)*w(i,2);
h(i,2)=sin(pi/6)*w(i,1)+cos(pi/6)*w(i,2);
d(i,1)=1-h(i,1);
d(i,2)=h(i,2);
endfor
plot(s(21:end,1),s(21:end,2),'b.');
hold on;
plot(h(21:end,1),h(21:end,2),'b.');
hold on;
plot(d(21:end,1),d(21:end,2),'b.');
axis('equal');
endfunction

