//****************************************************************************************
// ファイル名:KochCurve.as (KochCurve : コッホ曲線)
// MTASCでコンパイルして swf ファイルを作るための ActionScript によるコード
// コンパイルは mtasc -version 8 -swf KochCurve.swf -main KochCurve.as -header 400:400:30
// All rights reserved. Copyright (C) 2007 YokahiYokatoki
//****************************************************************************************
class KochCurve
{
static function main()
{
var xm=200; // マージン
var ym=200;
var L=160; // 基本の長さ
var pi=Math.PI/180;
var alp=0;
var cx=new Array();
var cy=new Array();
for(var k=0; k< 10; k++){cx[k]=new Array(); cy[k]=new Array();}
cx[0][0]=-3*L/2; cy[0][0]=0;
cx[0][1]=-L/2; cy[0][1]=0;
cx[0][2]=0; cy[0][2]=-1.7321*L/2;
cx[0][3]=L/2; cy[0][3]=0;
cx[0][4]=3*L/2; cy[0][4]=0;
var m=new Array();
m[0]=5;
var kmax=5;
for(var k=1; k< kmax; k++) //---------------------------------
{
m[k]=0;
for(var j=0; j< 4; j++)
{
if(j==0){alp=0;} else if(j==1){alp=-60;} else if(j==2){alp=60;} else if(j==3){alp=0;}
for(var i=0; i< m[k-1]; i++)
{
cx[k][m[k]]=cx[k-1][i]/3*Math.cos(pi*alp)-cy[k-1][i]/3*Math.sin(pi*alp)+(cx[0][j]+cx[0][j+1])/2;
cy[k][m[k]]=cx[k-1][i]/3*Math.sin(pi*alp)+cy[k-1][i]/3*Math.cos(pi*alp)+(cy[0][j]+cy[0][j+1])/2;
m[k]++;
}
}
}
var ax=new Array();
var ay=new Array();
var k=kmax-1;
var t=0;
_root.waiting=setInterval(function()
{
for(var i=0; i< m[k]; i++)
{
var xx=cx[k][i]*Math.cos(pi*t)-cy[k][i]*Math.sin(pi*t);
var yy=cx[k][i]*Math.sin(pi*t)+cy[k][i]*Math.cos(pi*t);
ax[i]=xx*(1+t/30)+3*L/4-3*L/2*Math.cos(pi*(60-t));
ay[i]=yy*(1+t/30)+3*1.732*L/4-3*L/2*Math.sin(pi*(60-t));
}
var fig=_root.createEmptyMovieClip("fig", 1);
fig.lineStyle(1, 0xff0000, 100);
fig.moveTo(xm+ax[0], ym+ay[0]);
for(var i=1; i< m[k]; i++){fig.lineTo(xm+ax[i], ym+ay[i]);}
fig.endFill();
t++; if(t>=60){t=0;}
if(t>100){clearInterval(_root.waiting);}
}, 1)
}
}
|