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
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer