DIR : /home/kozerus/public_html/jkwii/js/jsdoit/jsdoit10_waveflower/index.js

/home/kozerus/public_html/jkwii/js/jsdoit/jsdoit10_waveflower

var canvas,ctx,rtank,rrtank,timer,isstart,res,speed,count,sokudo,gime,stmax,stank,ctank;

window.onload=function(){
    var a,b,rad;
    canvas = document.getElementsByTagName('canvas')[0],
    ctx = canvas.getContext('2d');
    canvas.width=canvas.height=400;
    ctx.fillRect(0,0,400,400);
    ctx.strokeStyle="rgb(50,211,11)";
    gime=ctx.getImageData(0,0,400,400);
    ctx.globalCompositeOperation = "lighter";
    
    stmax=5000;
    stank=new Float32Array(stmax);
    ctank=new Float32Array(stmax);
    rad=0;
    b=Math.PI*2/stmax;
    for(a=0;a<stmax;a++){
    stank[a]=Math.sin(rad);
    ctank[a]=Math.cos(rad);
    rad+=b;
    }
    
    rtank=[];rrtank=[];
    for(a=0;a<30;a++)rtank[a]=Math.random();
    
    sokudo=40;
    count=0;
    res=0;
    speed=2;
    baum(0,15);
};

function baum(nam,maxbai){
    var a,kai;
    ctx.lineWidth=2/maxbai;
    kai=20;
    for(a=0;a<kai;a++)twis(nam+a*400/kai+10,a/kai,maxbai);
}

function twis(nam,r,maxbai){
    var a,b,max,x,y,x2,y2,han,han2,ritu,rad,size,size2,light;
    
    size=nam%400;
    size/=400;
    size*=size*size;
    if(size>0.15){
        size=(size-0.15)/0.85;
        size*=size*size;
        size=size*0.85+0.15;
    }
    size*=400;
    
    light=60;
    if(size>300)light=(1-(size-300)/100)*60;
    ctx.beginPath();
    ctx.strokeStyle="hsl("+((nam/2+110)|0)+",80%,"+(light|0)+"%)";
    
    max=(size*maxbai)|0;
    if(max>maxbai*200)max=maxbai*200;
    size2=size-20;
    if(size2<0)size2=0;
    ritu=rtank.length/max;
    c=0.05*max;
    b=(nam/600+r)*max;
    
    for(a=0;a<max;a++){
        han=(noize1(a*ritu,rtank)+0.2)*size;
        rad=((b/max*stmax)|0)%stmax;
        x=ctank[rad]*han+200;
        y=stank[rad]*han+200;
        han2=(noize1(a*ritu+33.333,rtank)+0.2)*size2;
        rad=(((b+c)/max*stmax)|0)%stmax;
        x2=ctank[rad]*han2+200;
        y2=stank[rad]*han2+200;
        ctx.moveTo(x,y);
        ctx.lineTo(x2,y2);
        b++;
    }
    ctx.stroke();
}

function ruup(){
var a,b;
    clearTimeout(timer);
    ctx.putImageData(gime,0,0);
    if(isstart===0){
        document.getElementById("stb").value="スタート";
        baum(res,10);
        return;
    }
    timer=setTimeout(ruup,30);

    if(count%sokudo===0)for(a=0;a<rtank.length;a++)rrtank[a]=(Math.random()-rtank[a])/sokudo;

    baum(res,5);
    
    for(a=0;a<rtank.length;a++)rtank[a]+=rrtank[a];
    count++;
    res+=speed;
}

function kaisi(){
    var a;
    a=document.location+"";
    a=a.split("/")[3];
    if(a!="jagarikin"){
        window.open("http://jsdo.it/jagarikin/ad9E");
        return;
    }
    if(isstart==1){
        isstart=0;
        return;
    }
    document.getElementById("stb").value="ストップ";
    isstart=1;
    timer=setTimeout(ruup,0);
}

function noize1(val,p){
    var i=val|0,r1=val-i,r2=1-r1,len=p.length,
    p0=p[i%len],p1=p[(i+1)%len],p2=p[(i+2)%len],
    x0=(p0+p1)/2,x1=(p1+p2)/2;
    return (x0*r2+p1*r1)*r2+(p1*r2+x1*r1)*r1;
}
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer