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
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