var passaggi=1;
var primo=40;
var secondo=450;
var terzo=560;
var quarto=450;
var coso=speriamo(primo,secondo,terzo,quarto);
var vett=[primo,secondo,coso[0],coso[1],terzo,quarto];
function init( ) {
var tela=$('koch');
Event.observe(tela,'click',passo,false);
var context=tela.getContext('2d');
context.beginPath( );
context.moveTo(primo,secondo);
context.lineTo(coso[0],coso[1]);
context.lineTo(terzo,quarto);
context.closePath( );
context.fillStyle='cyan';
context.fill( );
context.strokeStyle='blue';
context.stroke( );
}
function speriamo(a,b,c,d) {
var scarto=1;
var i,j;
var m=(c-a)/(d-b);
var l=Math.sqrt((a-c)*(a-c)+(b-d)*(b-d));
if(Math.abs(m)>=1){
for(j=0;j<600;j++){
i=(c*c+d*d-a*a-b*b)/(2*c-2*a)-(1/m)*j;
var distab=Math.sqrt((a-i)*(a-i)+(b-j)*(b-j));
if(Math.abs(distab-l)<scarto){
if( ((a<c)&&(b<=d)&&((j-b)/(d-b)<(i-a)/(c-a))) || ((a<c)&&(b>d)&&((j-b)/(d-b)>(i-a)/(c-a))) || ((a>c)&&(b<d)&&(j>(i-a)*(d-b)/(c-a)+b)) || ((a>c)&&(b>=d)&&(j>(i-a)*(d-b)/(c-a)+b)) || (a==c&&b<d&&i<a) || (a==c&&b>d&&i>a) ){
var getxy=[i,j];
return(getxy);
break;
}
}
}
}else{
for(i=0;i<600;i++){
j=(c*c+d*d-a*a-b*b)/(2*d-2*b)-m*i;
var distab=Math.sqrt((a-i)*(a-i)+(b-j)*(b-j));
if(Math.abs(distab-l)<scarto){
if( ((a<c)&&(b<=d)&&((j-b)/(d-b)<(i-a)/(c-a))) || ((a<c)&&(b>d)&&((j-b)/(d-b)>(i-a)/(c-a))) || ((a>c)&&(b<d)&&(j>(i-a)*(d-b)/(c-a)+b)) || ((a>c)&&(b>=d)&&(j>(i-a)*(d-b)/(c-a)+b)) || (a==c && b < d && i < a) || (a==c&&b>d&&i>a) ){
var getxy=[i,j];
return(getxy);
break;
}
}
}
}
}
function passo( ) {
var npunti=3*Math.pow(4,passaggi-1);
var tela=$('koch');
var context=tela.getContext('2d');
var i,j;
var metti=[];
for(i=0; i<npunti; i++){
var xunterzo,yunterzo,xdueterzi,ydueterzi;
if(vett[2+2*i]!==undefined){
xunterzo=(vett[2+2*i]+2*vett[0+2*i])/3;
yunterzo=(vett[3+2*i]+2*vett[1+2*i])/3;
xdueterzi=(2*vett[2+2*i]+vett[0+2*i])/3;
ydueterzi=(2*vett[3+2*i]+vett[1+2*i])/3;
var scoiattolo=speriamo(xunterzo,yunterzo,xdueterzi,ydueterzi);
metti.push(vett[0+2*i],vett[1+2*i],Math.round(xunterzo),Math.round(yunterzo),scoiattolo[0],scoiattolo[1],Math.round(xdueterzi),Math.round(ydueterzi));
}else{
xunterzo=(vett[0]+2*vett[0+2*i])/3;
yunterzo=(vett[1]+2*vett[1+2*i])/3;
xdueterzi=(2*vett[0]+vett[0+2*i])/3;
ydueterzi=(2*vett[1]+vett[1+2*i])/3;
var scoiattolo=speriamo(xunterzo,yunterzo,xdueterzi,ydueterzi);
metti.push(vett[4],vett[5],Math.round(xunterzo),Math.round(yunterzo),scoiattolo[0],scoiattolo[1],Math.round(xdueterzi),Math.round(ydueterzi));
}
}
metti.push(vett[0],vett[1]);
context.beginPath( );
context.moveTo(metti[0],metti[1]);
for(j=0; j<4*npunti+1; j++){
if(metti[j+2]!==undefined){
context.lineTo(metti[2*j+2],metti[2*j+3]);
}else{
context.moveTo(70,230);
}
}
context.closePath( );
context.fillStyle='cyan';
context.fill( );
context.strokeStyle='blue';
context.stroke( );
passaggi++;
vett=metti;
}
Event.observe(window,'load',init,false);