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

/home/kozerus/public_html/jkwii/js/jsdoit/fire

var canvas,ctx,timer,isstart,rtank,gime,gbai,mtime,
    ime1,ghan,ghan2,mei,gkai,gpx,gpy,grad,goct,gbure;

function nowt(){return new Date().getTime();}

window.onload=function(){
    var a,b,c,d,e,x,y;
    canvas = document.getElementsByTagName('canvas')[0],
    ctx = canvas.getContext('2d');
    canvas.width=canvas.height=400;
    ctx.fillRect(0,0,400,400);
    gime=ctx.getImageData(0,0,400,400);
    ime1=ctx.getImageData(0,0,400,400);
    ctx.globalCompositeOperation = "lighter";
    
    ghan=0.5;
    ghan2=0;
    mei=1;
    sokudo=1;
    gkai=12;
    gpx=gpy=grad=0;
    rtank=dubar(448,448);
    pnoise(448,448,0,5,2);
    gbai=4;
    fla();
    kakudai();
};

function kakudai(){
    var a,b,c,x,y,mx,my,mx1,my1,rx,ry,rx1,ry1,p1,p2,p3,p4;
    var tate,dt,iti,ime2,rmap,gmap,bmap,bai,han,han2,han3,pai2,pai8;
    if(gbai==1 && ghan2)return;
    han=400*400/4*ghan;
    han2=han*ghan2;
    pai2=Math.PI/2;
    pai8=Math.PI/8;
    
    a=gbai/10*(1+(gkai-6)/5)+1.2;
    han3=han*a;
    han2*=(1/a);
    tate=400/gbai;yoko=400/gbai;
    ime2=ctx.getImageData(0,0,yoko,tate);
    rmap=dubar(tate,yoko);
    gmap=dubar(tate,yoko);
    bmap=dubar(tate,yoko);
    
    dt=ime2.data;
    iti=0;
    for(a=0;a<tate;a++){
        for(b=0;b<yoko;b++){
            rmap[a][b]=dt[iti];
            gmap[a][b]=dt[iti+1];
            bmap[a][b]=dt[iti+2];
            iti+=4;
        }
    }

    dt=ime1.data;
    iti=-4;
    bai=1/gbai;
    for(a=0;a<400;a++){
        for(b=0;b<400;b++){
            iti+=4;
            mx=b-200;my=a-200;
            c=mx*mx+my*my;
            if(c>han3 || c<han2){
                dt[iti]=dt[iti+1]=dt[iti+2]=0;
                continue;
            }

            if(han2 || c>han){
                y=a*bai;x=b*bai;
            }else{
                y=a-200;x=b-200;
                c=1-c/han;c=pai2-Math.acos(c*pai8);c=1-c;
                y*=c;x*=c;y+=200;x+=200;y*=bai;x*=bai;
            }
            
            mx=Math.floor(x);my=Math.floor(y);
            mx1=mx+1;my1=my+1;
            if(mx1>=yoko)mx1=yoko-1;if(my1>=tate)my1=tate-1;
            rx=x-mx;ry=y-my;
            rx1=1-rx;ry1=1-ry;
            p1=rx1*ry1;p2=rx*ry1;p3=rx1*ry;p4=rx*ry;

            dt[iti]=rmap[mx][my]*p1+
                        rmap[mx1][my]*p2+rmap[mx][my1]*p3+rmap[mx1][my1]*p4;
            dt[iti+1]=gmap[mx][my]*p1+
                        gmap[mx1][my]*p2+gmap[mx][my1]*p3+gmap[mx1][my1]*p4;
            dt[iti+2]=bmap[mx][my]*p1+
                        bmap[mx1][my]*p2+bmap[mx][my1]*p3+bmap[mx1][my1]*p4;

        }
    }
    ctx.putImageData(ime1,0,0);
}

function fla(){
    var a,b,c,x,y,cou,rad,han,rsin,rcos,size,size2,han2;
    
    rsin=Math.sin(grad)/2;
    rcos=Math.cos(grad)/2;
    ctx.strokeStyle="rgba(255,55,15,"+(mei*6/gkai)+")";
    size=400/gbai;
    size2=size/2;
    han=size*size/4*ghan;
    han2=han*ghan2;
    
    for(a=0;a<size;a++){
        for(b=0;b<size;b++){
            x=b-size2;y=a-size2;
            c=x*x+y*y;
            if(c>han)continue;
            if(han2>c)continue;
            
            ctx.beginPath();
            x=b;y=a;
            ctx.moveTo(x,y);
            for(c=0;c<gkai;c++){
                x1=noiget(x+gpx*0.5,y+gpy)+x+rcos/(c+2);
                y1=noiget(x+gpx,y+200+gpy*0.5)+y+rsin/(c+2);
                ctx.lineTo(x1,y1);
                x=x1;
                y=y1;
            }
            ctx.stroke();
        }
    }
}

function noiget(x,y){
    x*=gbai;y*=gbai;
    x=(x|0)%rtank[0].length;y=(y|0)%rtank.length;
    if(x<0)x+=rtank[0].length;if(y<0)y+=rtank.length;
    return rtank[y][x];
}

function pnoise(tate,yoko,ss,es,bure){
    var a,b,c,d,wid,hei,ritu;
    var mf=Math.floor;
    
    goct=es;
    gbure=bure;
    for(a=0;a<tate;a++)for(b=0;b<yoko;b++)rtank[a][b]=0;
    b=1<<es;
    tate=Math.ceil(tate/b)*b;
    yoko=Math.ceil(yoko/b)*b;

    b=1<<ss;
    c=1;
    ritu=0;
    for(a=ss;a<es+1;a++){
        ritu+=c;
        pnoi(tate/b,yoko/b,a,c);
        b*=2;
        c*=bure;
    }
    
    c=1/ritu;
    for(a=0;a<rtank.length;a++){
        for(b=0;b<rtank.length;b++){
            d=rtank[a][b]*c;
            if(d<0.5){
                d*=2;d*=d*d;d/=2;
            }else{
                d=1-d;d*=2;d*=d*d;d/=2;d=1-d;
            }
            rtank[a][b]=(d-0.5)*2;
        }
    }
}

function pnoi(hei,wid,ss,br){
    var a,b,c,oct,oct2,x,y,px,py,px2,py2,x1,y1,x2,y2,rt,hei2,wid2,tt;
    var mf=Math.floor;
    var pai=Math.PI/2;
    ss=1<<ss;
    hei2=hei*ss;wid2=wid*ss;
    oct=dubar(hei,wid);
    oct2=dubar(hei,wid);

    for(a=0;a<hei;a++){
        for(b=0;b<wid;b++){
            oct2[a][b]=Math.random();
        }
    }

    if(ss==1){
        oct=dubar(hei,wid);
        for(a=0;a<hei;a++){
            for(b=0;b<wid;b++){
                py=a-1;if(py<0)py=hei-1;
                py2=a+1;if(py2>=hei)py2=0;
                px=b-1;if(px<0)px=wid-1;
                px2=b+1;if(px2>=wid)px2=0;
    
                oct[a][b]=oct2[py][px]/16+oct2[py][b]/8+oct2[py][px2]/16+
                oct2[a][px]/8+oct2[a][b]/4+oct2[a][px2]/8+
                oct2[py2][px]/16+oct2[py2][b]/8+oct2[py2][px2]/16;
            }
        }
    }else{
        oct=oct2;
    }

    if(ss!=1){
        tt=[];
        for(a=0;a<hei;a++){
            tt[a]=[];
            for(b=0;b<wid2;b++){
                x=b/ss;
                px=x|0;
                tt[a][b]=noize1(x-px,oct2[a][px],oct2[a][(px+1)%wid],oct2[a][(px+2)%wid]);
            }
        }
        
        for(a=0;a<hei2;a++){
            y=a/ss;
            py=y|0;
            y=y-py;
            for(b=0;b<wid2;b++){
                rtank[a][b]+=noize1(y,tt[py][b],tt[(py+1)%hei][b],tt[(py+2)%hei][b])*br;
            }
        }
    }else{
        for(a=0;a<hei2;a++){
            for(b=0;b<wid2;b++)rtank[a][b]+=oct[a][b]*br;
        }
    }
    
    function noize1(r1,p0,p1,p2){
        var r2=1-r1,
        x0=(p0+p1)*0.5,x1=(p1+p2)*0.5;
        return (x0*r2+p1*r1)*r2+(p1*r2+x1*r1)*r1;
    }
}

function dubar(r1,r2){
    var a,b;
    a=new Array(r1);
    for(b=0;b<r1;b++)a[b]=new Float32Array(r2);
    return a;
}

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

function ruup(){
    var a,b;
    clearTimeout(timer);
    if(isstart===0){
        document.getElementById("stb").value="スタート";
        return;
    }
    timer=setTimeout(ruup,30);
    
    mtime=nowt();
    ctx.putImageData(gime,0,0);
    fla();
    kakudai();
    grad+=sokudo/4;
    a=grad/17;
    gpx+=Math.cos(a*2)*5*sokudo;
    gpy+=Math.sin(a*Math.PI)*5*sokudo;
    document.getElementById("tes").innerHTML="処理時間:"+(nowt()-mtime)+"ミリ秒";
}
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer