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

/home/kozerus/public_html/jkwii/js/jsdoit/globe

var ctx,canvas,csize,csize2,msize,kari,kari2,chk,timer,timeseed,isstart;
var gt1,gt2,gt3,gt4,gx,gy,gcou,gout,gbai,ghan,gime,gratank,at2tank,at2max;

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

window.onload=function(){
    var a,b,col,pai2;
    csize=400;
    gbai=3;
    csize2=csize*gbai;
    msize=100;
    canvas=document.getElementById("maincan");
    canvas.width=csize;
    canvas.height=csize;
    ctx=canvas.getContext("2d");
    ctx.fillStyle="rgb(0,0,0)";
    ctx.fillRect(0,0,csize,csize);
    gime=ctx.getImageData(0,0,csize,csize);

    kari=new Array(csize);
    for(a=0;a<csize;a++){
        kari[a]=new Float32Array(csize*3);
    }

    kari2=new Array(csize2);
    for(a=0;a<csize2;a++){
        kari2[a]=new Float32Array(csize2*3);
    }

    chk=new Array(msize);
    for(a=0;a<msize;a++){
        chk[a]=new Float32Array(msize);
    }
    
    col=[
        [255,20,10],[20,255,10],[20,10,255]
    ];
    gratank=[];
    for(a=0;a<10000;a++){
        gratank[a]=gra(a/10000,col);
    }
        
    at2max=200;
    pai2=Math.PI*2;
    at2tank=[];
    for(a=0;a<4;a++){
        at2tank[a]=new Float32Array(at2max);
    }
    b=at2max/2;
    for(a=0;a<at2max;a++){
        at2tank[0][a]=Math.atan2(1,a/b-1)/pai2;
        at2tank[1][a]=Math.atan2(a/b-1,1)/pai2;
        at2tank[2][a]=Math.atan2(-1,a/b-1)/pai2;
        at2tank[3][a]=Math.atan2(a/b-1,-1)/pai2;
    }
    
    gt1=-0.615876910276711;
    gt2=-0.041662209667265415;
    gt3=-0.0019680894911289215;
    gt4=0.21483621932566166;
    ghan=0.6;
    gx=gy=0.1;
    setjaga(900000,1);
};

function at2get(y,x){
    var a,b,abs;
    if(y===0 && x===0)return 0;
    abs=Math.abs;
    a=0;
    if(abs(x)>abs(y)){
        a=1;
        b=y;y=x;x=b;
    }
    if(y<0)a+=2;
    x=Math.floor((x/abs(y)+1)*at2max/2);
    if(x>=at2max)x=at2max-1;
    return at2tank[a][x];
}

function setjaga(max,ch){
    var a,b;
    for(a=0;a<csize2;a++){
        for(b=0;b<csize2*3;b++){
            kari2[a][b]=0;
        }
    }
    if(ch!=1){
        timeseed=new Date().getTime()%100000;
        checkjaga();
        document.getElementById("stbt").style.visibility="visible";
    }
    isstart=0;
    gcou=0;
    jaga(csize2/2,max,gt1,gt2,gt3,gt4,1,gx,gy);
    syuku();
    modosi(22000/gcou);
    ctx.putImageData(gime,0,0);
    document.getElementById("coudiv").innerHTML="点描画数"+(gcou*4);
}

function syuku(){
    var a,b,c,d,e,bai;
    for(a=0;a<csize;a++){
        for(b=0;b<csize;b++){
            for(f=0;f<3;f++){
                e=0;
                for(c=0;c<gbai;c++){
                    for(d=0;d<gbai;d++){
                        e+=kari2[a*gbai+c][(b*gbai+d)*3+f];
                    }
                }
                kari[a][b*3+f]=e;
            }
        }
    }
}

function rando(){
    var a,b,c;
    timeseed=(641*timeseed+3313)%100000;
    c=Math.random();
    b=Math.floor(timeseed/20000);
    for(a=0;a<b;a++){
        c+=Math.random();
    }
    return c%1;
}

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

function ruup(){
    var a,b;
    clearTimeout(timer);
    if(gcou>=100000000)isstart=0;
    
    if(isstart===0){
        document.getElementById("stbt").value="スタート";
        return;
    }

    a=jaga(csize2/2,30000,gt1,gt2,gt3,gt4,1,gx,gy);
    if(a==-1){
        document.getElementById("coudiv").innerHTML="発散しました><";
        document.getElementById("stbt").value="start";
        return;
    }

    document.getElementById("coudiv").innerHTML="点描画数"+(gcou*4);
    syuku();
    modosi(22000/gcou);
    ctx.putImageData(gime,0,0);
    timer=setTimeout(ruup,16);
}

function checkjaga(){
    var a,b,c;

    for(;;){
        gt1=-2+rando()*4;
        gt2=-2+rando()*4;
        gt3=-2+rando()*4;
        gt4=-2+rando()*4;
        ghan=0.6;

        for(a=0;a<msize;a++){
            for(b=0;b<msize;b++){
                chk[a][b]=0;
            }
        }

    gout=0;
    a=jaga(msize/2,1000,gt1,gt2,gt3,gt4,0,-0.1,-0.1);
        if(a!=-1)break;
    }
}

function jaga(han,max,t1,t2,t3,t4,typ,x,y){
    var a,b,c,d,e,f,g,h;
    var x1,y1,tx,ty,pai2;

    pai2=Math.PI*2;
    tx=han;ty=han;
    han*=ghan;

    for(a=0;a<max;a++){
        b=t3-x;
        c=t4-y;
        for(h=0;h<3;h++){
            d=t1-b;
            e=t2-c;
            b=d*d-e*e;
            c=2*d*e;
        }
        h=b*b+c*c;
        x1=b/(0.1+h);
        y1=c/(0.1+h);
        
        if(typ==1){
            d=at2get(x-x1,y-y1)+d/5;
            d=d%1;if(d<0)d+=1;
            d=gratank[Math.floor(d*gratank.length)];
        }
        
        x=x1;
        y=y1;
        if(isNaN(x) || isNaN(y) || Math.abs(x)>10000)return -1;

        if(typ==1){
            ten1(x*han+tx,y*han+ty,d[0],d[1],d[2]);
        }else{
            ten2(x,y);
            if(gout>350)return -1;
        }
    }
    gcou+=max;
    gx=x;
    gy=y;
}

function ten2(x,y){
    x=Math.floor((x)*msize/2*ghan);
    y=Math.floor((y+1)*msize/2*ghan);
    if(x<0 || x>=msize || y<0 || y>=msize){
        gout++;
        return;
    }
    chk[y][x]++;
    if(chk[y][x]>15)gout+=1000;
}

function gra(atai,col){
    var a,b,c;
    atai=atai%1;
    if(atai<0)atai+=1;
    atai*=col.length;

    a=atai%1;
    a=0.5-Math.cos(a*Math.PI)/2;
    b=1-a;
    c=Math.floor(atai)%col.length;
    d=(c+1)%col.length;

    c1=col[c][0]*b+col[d][0]*a;
    c2=col[c][1]*b+col[d][1]*a;
    c3=col[c][2]*b+col[d][2]*a;
    return [c1,c2,c3];
}

function modosi(ki){
    var a,b,c,d,iti,max;
    max=csize*3;
    iti=0;
    for(a=0;a<csize;a++){
        for(b=0;b<max;b+=3){
            for(c=0;c<3;c++){
                d=Math.floor(kari[a][b+c]*ki);
                if(d>255)d=255;
                gime.data[iti+c]=d;
            }
            iti+=4;
        }
    }
}

function ten1(x,y,c1,c2,c3){
    var mx,x1,y1,x2,y2;
    mx=Math.floor(x);
    x2=x-mx;
    x1=1-x2;
    my=Math.floor(y);
    y2=y-my;
    y1=1-y2;

    pp(mx,my,x2*y2,c1,c2,c3);
    pp(mx+1,my,x1*y2,c1,c2,c3);
    pp(mx,my+1,x2*y1,c1,c2,c3);
    pp(mx+1,my+1,x1*y1,c1,c2,c3);

    function pp(px,py,bai,d1,d2,d3){
        var py2,px2;
        if(px<0 || px>=csize2 || py<0 || py>=csize2)return;
        px2=px*3;
        kari2[py][px2]+=d1*bai;
        kari2[py][px2+1]+=d2*bai;
        kari2[py][px2+2]+=d3*bai;
        px2=(csize2-py)*3;
        kari2[px][px2]+=d3*bai;
        kari2[px][px2+1]+=d2*bai;
        kari2[px][px2+2]+=d1*bai;
        px2=(csize2-px)*3;
        kari2[csize2-py][px2]+=d2*bai;
        kari2[csize2-py][px2+1]+=d3*bai;
        kari2[csize2-py][px2+2]+=d1*bai;
        px2=py*3;
        kari2[csize2-px][px2]+=d3*bai;
        kari2[csize2-px][px2+1]+=d1*bai;
        kari2[csize2-px][px2+2]+=d2*bai;
    }
}
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer