DIR : /home/kozerus/public_html/cropex/fun/index_neave_pi_best.html
/home/kozerus/public_html/cropex/fun
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>index_konabus.html 20180505_2400</title>
<style>
body {
// background-color: lightblue;
// background-color: black;
background-color: darkslategrey;
background-color: linen;
// color: black;
color: white;
// font-size:62.5%;
font-size:48px;
// font-family: yokkmokkOT;
font-size: 38pt;
}
// h1 { font-size: 2.4em; } /* =24px */
h1 { font-size: 58pt; } /* =24px */
h2 { font-size: 12pt; } /* =24px */
p { font-size: 10pt; } /* =14px */
li { font-size: 20pt; } /* =14px? */
}
</style>
<script name="neave_pixeldust2_js" >
(function(){window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){setTimeout(callback,1000/60);};
function FluidField(){
var iterations=4,dt=0.05,damp=0.99,dens,dens_prev,u,u_prev,v,v_prev,width,height,rowSize,size;function Field(dens,u,v){this.getDensity=function(x,y){return dens[(x+1)+(y+1)*rowSize];};this.setDensity=function(x,y,d){dens[(x+1)+(y+1)*rowSize]=d;};this.setVelocity=function(x,y,xv,yv){u[(x+1)+(y+1)*rowSize]=xv;v[(x+1)+(y+1)*rowSize]=yv;};}
function addFields(x,s){
for(var i=size;i--;)x[i]+=s[i]*dt;}
function setBoundary(b,x){if(b===1){
for( var i=1;i<=width;i++){x[i]=x[i+rowSize];x[i+(height+1)*rowSize]=x[i+height*rowSize];}
for(var j=1;i<=height;i++){x[j*rowSize]=-x[1+j*rowSize];x[(width+1)+j*rowSize]=-x[width+j*rowSize];}}else if(b===2){
for(var i=1;i<=width;i++){x[i]=-x[i+rowSize];x[i+(height+1)*rowSize]=-x[i+height*rowSize];}
for(var j=1;j<=height;j++){x[j*rowSize]=x[1+j*rowSize];x[(width+1)+j*rowSize]=x[width+j*rowSize];}}else{
for(var i=1;i<=width;i++){x[i]=x[i+rowSize];x[i+(height+1)*rowSize]=x[i+height*rowSize];}
for(var j=1;j<=height;j++){x[j*rowSize]=x[1+j*rowSize];x[(width+1)+j*rowSize]=x[width+j*rowSize];}}
var maxEdge=(height+1)*rowSize;x[0]=0.5*(x[1]+x[rowSize]);x[maxEdge]=0.5*(x[1+maxEdge]+x[height*rowSize]);x[(width+1)]=0.5*(x[width]+x[(width+1)+rowSize]);x[(width+1)+maxEdge]=0.5*(x[width+maxEdge]+x[(width+1)+height*rowSize]);}
function diffuse(b,x,x0){
var a=0;solveLinear(b,x,x0,a,1+4*a);}
function diffuse2(x,x0,y,y0){
var a=0;solveLinear2(x,x0,y,y0,a,4*a+1);}
function solveLinear(b,x,x0,a,c){if(a===0&&c===1){
for(var j=1;j<=height;j++){var currentRow=j*rowSize;currentRow++;
for(var i=0;i<width;i++){x[currentRow]=x0[currentRow];currentRow++;}} setBoundary(b,x);} else{var invC=1/c;
for(var k=0;k<iterations;k++){
for(var j=1;j<=height;j++){var lastRow=(j-1)*rowSize;var currentRow=j*rowSize;var nextRow=(j+1)*rowSize;var lastX=x[currentRow];currentRow++;
for(var i=1;i<=width;i++){lastX=x[currentRow]=(x0[currentRow]+a*(lastX+x[++currentRow]+x[++lastRow]+x[++nextRow]))*invC;}}
setBoundary(b,x);}}}
function solveLinear2(x,x0,y,y0,a,c){if(a===0&&c===1){
for(var j=1;j<=height;j++){var currentRow=j*rowSize;currentRow++;
for(var i=0;i<width;i++){x[currentRow]=x0[currentRow];y[currentRow]=y0[currentRow];currentRow++;}}
setBoundary(1,x);setBoundary(2,y);}
else{var invC=1/c;
for(var k=0;k<iterations;k++){
for(var j=1;j<=height;j++){var lastRow=(j-1)*rowSize;var currentRow=j*rowSize;var nextRow=(j+1)*rowSize;var lastX=x[currentRow];var lastY=y[currentRow];currentRow++;
for(var i=1;i<=width;i++){lastX=x[currentRow]=(x0[currentRow]+a*(lastX+x[currentRow]+x[lastRow]+x[nextRow]))*invC;lastY=y[currentRow]=(y0[currentRow]+a*(lastY+y[++currentRow]+y[++lastRow]+y[++nextRow]))*invC;}}
setBoundary(1,x);setBoundary(2,y);}}}
function advect(b,d,d0,u,v){var wdt0=width*dt,hdt0=height*dt,wp5=width+0.5,hp5=height+0.5;
for(var j=1;j<=height;j++){var pos=j*rowSize;
for(var i=1;i<=width;i++){var x=i-wdt0*u[++pos],y=j-hdt0*v[pos];if(x<0.5)x=0.5;else if(x>wp5)x=wp5;var i0=x|0,i1=i0+1;if(y<0.5)y=0.5;else if(y>hp5)y=hp5;var j0=y|0,j1=j0+1,s1=x-i0,s0=1-s1,t1=y-j0,t0=1-t1,row1=j0*rowSize,row2=j1*rowSize;d[pos]=s0*(t0*d0[i0+row1]+t1*d0[i0+row2])+s1*(t0*d0[i1+row1]+t1*d0[i1+row2]);}}
setBoundary(b,d);}
function project(u,v,p,div){var h=-0.5/Math.sqrt(width*height);
for(var j=1;j<=height;j++){var row=j*rowSize,prevRow=(j-1)*rowSize,prevValue=row-1,currentRow=row,nextValue=row+1,nextRow=(j+1)*rowSize;
for(var i=1;i<=width;i++){div[++currentRow]=h*(u[++nextValue]-u[++prevValue]+v[++nextRow]-v[++prevRow]);p[currentRow]=0;}}
setBoundary(0,div);setBoundary(0,p);solveLinear(0,p,div,1,4);var wScale=0.5*width,hScale=0.5*height;
for(var j=1;j<=height;j++){var prevPos=j*rowSize-1,currentPos=j*rowSize,nextPos=j*rowSize+1,prevRow=(j-1)*rowSize,currentRow=j*rowSize,nextRow=(j+1)*rowSize;
for(var i=1;i<=width;i++){u[++currentPos]-=wScale*(p[++nextPos]-p[++prevPos]);v[currentPos]-=hScale*(p[++nextRow]-p[++prevRow]);}}
setBoundary(1,u);setBoundary(2,v);}
function densityStep(x,x0,u,v){addFields(x,x0);diffuse(0,x0,x);advect(0,x,x0,u,v);}
function velocityStep(u,v,u0,v0){addFields(u,u0);addFields(v,v0);var temp=u0;u0=u;u=temp;temp=v0;v0=v;v=temp;diffuse2(u,u0,v,v0);project(u,v,u0,v0);temp=u0;u0=u;u=temp;temp=v0;v0=v;v=temp;advect(1,u,u0,u0,v0);advect(2,v,v0,u0,v0);project(u,v,u0,v0);}
this.update=function(){
for(var i=size;i--;){u_prev[i]=v_prev[i]=dens_prev[i]=0;dens[i]*=damp;}
updateFrame(new Field(dens_prev,u_prev,v_prev));velocityStep(u,v,u_prev,v_prev);densityStep(dens,dens_prev,u,v);drawFrame(new Field(dens,u,v));};this.reset=function(){rowSize=width+2;size=(width+2)*(height+2);dens=new Array(size);dens_prev=new Array(size);u=new Array(size);u_prev=new Array(size);v=new Array(size);v_prev=new Array(size);
for(var i=size;i--;){dens_prev[i]=u_prev[i]=v_prev[i]=dens[i]=u[i]=v[i]=0;}};
this.setResolution=function(w,h){width=w;height=h;this.reset();};}
var get=document.querySelector.bind(document),on=document.addEventListener.bind(document),
canvas,context,scale,displayWidth,displayHeight,fieldSize=4,fieldWidth,fieldHeight,omx=0,omy=0,mx=0,my=0,density=200,drawing=false,buffer,bufferData,fluid;function initBuffer(){}
function updateFrame(field){if(drawing){
var dx=mx-omx,dy=my-omy,length=(Math.sqrt(dx*dx+dy*dy)+0.5)|0;if(length<1)length=1;
for(var i=length;i--;){
var x=((omx+dx*i/length)/displayWidth*fieldWidth)|0,y=((omy+dy*i/length)/displayHeight*fieldHeight)|0;field.setVelocity(x,y,dx,dy);field.setDensity(x,y,density);}
omx=mx;omy=my;}}
function drawFrame(field){
for( var x=fieldWidth;x--;){
for(var y=fieldHeight;y--;){bufferData[(y*fieldWidth+x)*4+Math.floor(Math.random()*3)]=field.getDensity(x,y)*0xff;}}
context.putImageData(buffer,0,0);}
function updateFluid(){updateID=requestAnimationFrame(updateFluid);fluid.update();}
function getNormHeight(){return innerHeight/fieldHeight/fieldSize;}
function getNormWidth(){return innerWidth/fieldWidth/fieldSize;}
function setSize(){
displayWidth=Math.round(innerWidth)+500;
displayHeight=Math.round(innerHeight);
omx=displayWidth/2;
omy=displayHeight/2;
mx=omx+(Math.random()-0.5)*4;
my=omy+(Math.random()-0.5)*4;
fieldWidth=Math.round(displayWidth/fieldSize);
fieldHeight=Math.round(displayHeight/fieldSize);
canvas.width=fieldWidth;
canvas.height=fieldHeight;
}
function init(){
canvas=get('canvas');try{context=canvas.getContext('2d');}catch(e){get('.alt').style.display='block';return;
}
setSize();
var bufferCanvas=document.createElement('canvas');
bufferCanvas.width=fieldWidth;
bufferCanvas.height=fieldHeight;
try{buffer=bufferCanvas.getContext('2d').createImageData(fieldWidth,fieldHeight);
bufferData=buffer.data;
var size=fieldWidth*fieldHeight*4;
for(var i=3;i<size;i+=4){bufferData[i]=0xff;}}catch(e){get('.alt').style.display='block';return;}
canvas.style.display='block';
if(get('body.mobile')){
canvas.ontouchstart=function(event){drawing=true;omx=mx=event.changedTouches[0].clientX/getNormWidth();omy=my=event.changedTouches[0].clientY/getNormHeight();event.preventDefault();};
canvas.ontouchmove=function(event){mx=event.changedTouches[0].clientX/getNormWidth();my=event.changedTouches[0].clientY/getNormHeight();};
canvas.ontouchend=function(){drawing=false;};}else{
canvas.onmousemove=function(event){mx=event.clientX/getNormWidth();my=event.clientY/getNormHeight();};}
fluid=new FluidField();fluid.setResolution(
canvas.width,canvas.height);drawing=true;updateFluid();}
on('DOMContentLoaded',init);}());
</script id=neave_pixeldust2_js_end>
<!--
<script name="neave_pixeldust2_js"
src="data:/text/plain;base64,KGZ1bmN0aW9uKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGNhbGxiYWNrKXtzZXRUaW1lb3V0KGNhbGxiYWNrLDEwMDAvNjApO307ZnVuY3Rpb24gRmx1aWRGaWVsZCgpe3ZhciBpdGVyYXRpb25zPTQsZHQ9MC4wNSxkYW1wPTAuOTksZGVucyxkZW5zX3ByZXYsdSx1X3ByZXYsdix2X3ByZXYsd2lkdGgsaGVpZ2h0LHJvd1NpemUsc2l6ZTtmdW5jdGlvbiBGaWVsZChkZW5zLHUsdil7dGhpcy5nZXREZW5zaXR5PWZ1bmN0aW9uKHgseSl7cmV0dXJuIGRlbnNbKHgrMSkrKHkrMSkqcm93U2l6ZV07fTt0aGlzLnNldERlbnNpdHk9ZnVuY3Rpb24oeCx5LGQpe2RlbnNbKHgrMSkrKHkrMSkqcm93U2l6ZV09ZDt9O3RoaXMuc2V0VmVsb2NpdHk9ZnVuY3Rpb24oeCx5LHh2LHl2KXt1Wyh4KzEpKyh5KzEpKnJvd1NpemVdPXh2O3ZbKHgrMSkrKHkrMSkqcm93U2l6ZV09eXY7fTt9CmZ1bmN0aW9uIGFkZEZpZWxkcyh4LHMpe2Zvcih2YXIgaT1zaXplO2ktLTspeFtpXSs9c1tpXSpkdDt9CmZ1bmN0aW9uIHNldEJvdW5kYXJ5KGIseCl7aWYoYj09PTEpe2Zvcih2YXIgaT0xO2k8PXdpZHRoO2krKyl7eFtpXT14W2krcm93U2l6ZV07eFtpKyhoZWlnaHQrMSkqcm93U2l6ZV09eFtpK2hlaWdodCpyb3dTaXplXTt9CmZvcih2YXIgaj0xO2k8PWhlaWdodDtpKyspe3hbaipyb3dTaXplXT0teFsxK2oqcm93U2l6ZV07eFsod2lkdGgrMSkraipyb3dTaXplXT0teFt3aWR0aCtqKnJvd1NpemVdO319ZWxzZSBpZihiPT09Mil7Zm9yKHZhciBpPTE7aTw9d2lkdGg7aSsrKXt4W2ldPS14W2krcm93U2l6ZV07eFtpKyhoZWlnaHQrMSkqcm93U2l6ZV09LXhbaStoZWlnaHQqcm93U2l6ZV07fQpmb3IodmFyIGo9MTtqPD1oZWlnaHQ7aisrKXt4W2oqcm93U2l6ZV09eFsxK2oqcm93U2l6ZV07eFsod2lkdGgrMSkraipyb3dTaXplXT14W3dpZHRoK2oqcm93U2l6ZV07fX1lbHNle2Zvcih2YXIgaT0xO2k8PXdpZHRoO2krKyl7eFtpXT14W2krcm93U2l6ZV07eFtpKyhoZWlnaHQrMSkqcm93U2l6ZV09eFtpK2hlaWdodCpyb3dTaXplXTt9CmZvcih2YXIgaj0xO2o8PWhlaWdodDtqKyspe3hbaipyb3dTaXplXT14WzEraipyb3dTaXplXTt4Wyh3aWR0aCsxKStqKnJvd1NpemVdPXhbd2lkdGgraipyb3dTaXplXTt9fQp2YXIgbWF4RWRnZT0oaGVpZ2h0KzEpKnJvd1NpemU7eFswXT0wLjUqKHhbMV0reFtyb3dTaXplXSk7eFttYXhFZGdlXT0wLjUqKHhbMSttYXhFZGdlXSt4W2hlaWdodCpyb3dTaXplXSk7eFsod2lkdGgrMSldPTAuNSooeFt3aWR0aF0reFsod2lkdGgrMSkrcm93U2l6ZV0pO3hbKHdpZHRoKzEpK21heEVkZ2VdPTAuNSooeFt3aWR0aCttYXhFZGdlXSt4Wyh3aWR0aCsxKStoZWlnaHQqcm93U2l6ZV0pO30KZnVuY3Rpb24gZGlmZnVzZShiLHgseDApe3ZhciBhPTA7c29sdmVMaW5lYXIoYix4LHgwLGEsMSs0KmEpO30KZnVuY3Rpb24gZGlmZnVzZTIoeCx4MCx5LHkwKXt2YXIgYT0wO3NvbHZlTGluZWFyMih4LHgwLHkseTAsYSw0KmErMSk7fQpmdW5jdGlvbiBzb2x2ZUxpbmVhcihiLHgseDAsYSxjKXtpZihhPT09MCYmYz09PTEpe2Zvcih2YXIgaj0xO2o8PWhlaWdodDtqKyspe3ZhciBjdXJyZW50Um93PWoqcm93U2l6ZTtjdXJyZW50Um93Kys7Zm9yKHZhciBpPTA7aTx3aWR0aDtpKyspe3hbY3VycmVudFJvd109eDBbY3VycmVudFJvd107Y3VycmVudFJvdysrO319CnNldEJvdW5kYXJ5KGIseCk7fQplbHNle3ZhciBpbnZDPTEvYztmb3IodmFyIGs9MDtrPGl0ZXJhdGlvbnM7aysrKXtmb3IodmFyIGo9MTtqPD1oZWlnaHQ7aisrKXt2YXIgbGFzdFJvdz0oai0xKSpyb3dTaXplO3ZhciBjdXJyZW50Um93PWoqcm93U2l6ZTt2YXIgbmV4dFJvdz0oaisxKSpyb3dTaXplO3ZhciBsYXN0WD14W2N1cnJlbnRSb3ddO2N1cnJlbnRSb3crKztmb3IodmFyIGk9MTtpPD13aWR0aDtpKyspe2xhc3RYPXhbY3VycmVudFJvd109KHgwW2N1cnJlbnRSb3ddK2EqKGxhc3RYK3hbKytjdXJyZW50Um93XSt4WysrbGFzdFJvd10reFsrK25leHRSb3ddKSkqaW52Qzt9fQpzZXRCb3VuZGFyeShiLHgpO319fQpmdW5jdGlvbiBzb2x2ZUxpbmVhcjIoeCx4MCx5LHkwLGEsYyl7aWYoYT09PTAmJmM9PT0xKXtmb3IodmFyIGo9MTtqPD1oZWlnaHQ7aisrKXt2YXIgY3VycmVudFJvdz1qKnJvd1NpemU7Y3VycmVudFJvdysrO2Zvcih2YXIgaT0wO2k8d2lkdGg7aSsrKXt4W2N1cnJlbnRSb3ddPXgwW2N1cnJlbnRSb3ddO3lbY3VycmVudFJvd109eTBbY3VycmVudFJvd107Y3VycmVudFJvdysrO319CnNldEJvdW5kYXJ5KDEseCk7c2V0Qm91bmRhcnkoMix5KTt9CmVsc2V7dmFyIGludkM9MS9jO2Zvcih2YXIgaz0wO2s8aXRlcmF0aW9ucztrKyspe2Zvcih2YXIgaj0xO2o8PWhlaWdodDtqKyspe3ZhciBsYXN0Um93PShqLTEpKnJvd1NpemU7dmFyIGN1cnJlbnRSb3c9aipyb3dTaXplO3ZhciBuZXh0Um93PShqKzEpKnJvd1NpemU7dmFyIGxhc3RYPXhbY3VycmVudFJvd107dmFyIGxhc3RZPXlbY3VycmVudFJvd107Y3VycmVudFJvdysrO2Zvcih2YXIgaT0xO2k8PXdpZHRoO2krKyl7bGFzdFg9eFtjdXJyZW50Um93XT0oeDBbY3VycmVudFJvd10rYSoobGFzdFgreFtjdXJyZW50Um93XSt4W2xhc3RSb3ddK3hbbmV4dFJvd10pKSppbnZDO2xhc3RZPXlbY3VycmVudFJvd109KHkwW2N1cnJlbnRSb3ddK2EqKGxhc3RZK3lbKytjdXJyZW50Um93XSt5WysrbGFzdFJvd10reVsrK25leHRSb3ddKSkqaW52Qzt9fQpzZXRCb3VuZGFyeSgxLHgpO3NldEJvdW5kYXJ5KDIseSk7fX19CmZ1bmN0aW9uIGFkdmVjdChiLGQsZDAsdSx2KXt2YXIgd2R0MD13aWR0aCpkdCxoZHQwPWhlaWdodCpkdCx3cDU9d2lkdGgrMC41LGhwNT1oZWlnaHQrMC41O2Zvcih2YXIgaj0xO2o8PWhlaWdodDtqKyspe3ZhciBwb3M9aipyb3dTaXplO2Zvcih2YXIgaT0xO2k8PXdpZHRoO2krKyl7dmFyIHg9aS13ZHQwKnVbKytwb3NdLHk9ai1oZHQwKnZbcG9zXTtpZih4PDAuNSl4PTAuNTtlbHNlIGlmKHg+d3A1KXg9d3A1O3ZhciBpMD14fDAsaTE9aTArMTtpZih5PDAuNSl5PTAuNTtlbHNlIGlmKHk+aHA1KXk9aHA1O3ZhciBqMD15fDAsajE9ajArMSxzMT14LWkwLHMwPTEtczEsdDE9eS1qMCx0MD0xLXQxLHJvdzE9ajAqcm93U2l6ZSxyb3cyPWoxKnJvd1NpemU7ZFtwb3NdPXMwKih0MCpkMFtpMCtyb3cxXSt0MSpkMFtpMCtyb3cyXSkrczEqKHQwKmQwW2kxK3JvdzFdK3QxKmQwW2kxK3JvdzJdKTt9fQpzZXRCb3VuZGFyeShiLGQpO30KZnVuY3Rpb24gcHJvamVjdCh1LHYscCxkaXYpe3ZhciBoPS0wLjUvTWF0aC5zcXJ0KHdpZHRoKmhlaWdodCk7Zm9yKHZhciBqPTE7ajw9aGVpZ2h0O2orKyl7dmFyIHJvdz1qKnJvd1NpemUscHJldlJvdz0oai0xKSpyb3dTaXplLHByZXZWYWx1ZT1yb3ctMSxjdXJyZW50Um93PXJvdyxuZXh0VmFsdWU9cm93KzEsbmV4dFJvdz0oaisxKSpyb3dTaXplO2Zvcih2YXIgaT0xO2k8PXdpZHRoO2krKyl7ZGl2WysrY3VycmVudFJvd109aCoodVsrK25leHRWYWx1ZV0tdVsrK3ByZXZWYWx1ZV0rdlsrK25leHRSb3ddLXZbKytwcmV2Um93XSk7cFtjdXJyZW50Um93XT0wO319CnNldEJvdW5kYXJ5KDAsZGl2KTtzZXRCb3VuZGFyeSgwLHApO3NvbHZlTGluZWFyKDAscCxkaXYsMSw0KTt2YXIgd1NjYWxlPTAuNSp3aWR0aCxoU2NhbGU9MC41KmhlaWdodDtmb3IodmFyIGo9MTtqPD1oZWlnaHQ7aisrKXt2YXIgcHJldlBvcz1qKnJvd1NpemUtMSxjdXJyZW50UG9zPWoqcm93U2l6ZSxuZXh0UG9zPWoqcm93U2l6ZSsxLHByZXZSb3c9KGotMSkqcm93U2l6ZSxjdXJyZW50Um93PWoqcm93U2l6ZSxuZXh0Um93PShqKzEpKnJvd1NpemU7Zm9yKHZhciBpPTE7aTw9d2lkdGg7aSsrKXt1WysrY3VycmVudFBvc10tPXdTY2FsZSoocFsrK25leHRQb3NdLXBbKytwcmV2UG9zXSk7dltjdXJyZW50UG9zXS09aFNjYWxlKihwWysrbmV4dFJvd10tcFsrK3ByZXZSb3ddKTt9fQpzZXRCb3VuZGFyeSgxLHUpO3NldEJvdW5kYXJ5KDIsdik7fQpmdW5jdGlvbiBkZW5zaXR5U3RlcCh4LHgwLHUsdil7YWRkRmllbGRzKHgseDApO2RpZmZ1c2UoMCx4MCx4KTthZHZlY3QoMCx4LHgwLHUsdik7fQpmdW5jdGlvbiB2ZWxvY2l0eVN0ZXAodSx2LHUwLHYwKXthZGRGaWVsZHModSx1MCk7YWRkRmllbGRzKHYsdjApO3ZhciB0ZW1wPXUwO3UwPXU7dT10ZW1wO3RlbXA9djA7djA9djt2PXRlbXA7ZGlmZnVzZTIodSx1MCx2LHYwKTtwcm9qZWN0KHUsdix1MCx2MCk7dGVtcD11MDt1MD11O3U9dGVtcDt0ZW1wPXYwO3YwPXY7dj10ZW1wO2FkdmVjdCgxLHUsdTAsdTAsdjApO2FkdmVjdCgyLHYsdjAsdTAsdjApO3Byb2plY3QodSx2LHUwLHYwKTt9CnRoaXMudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPXNpemU7aS0tOyl7dV9wcmV2W2ldPXZfcHJldltpXT1kZW5zX3ByZXZbaV09MDtkZW5zW2ldKj1kYW1wO30KdXBkYXRlRnJhbWUobmV3IEZpZWxkKGRlbnNfcHJldix1X3ByZXYsdl9wcmV2KSk7dmVsb2NpdHlTdGVwKHUsdix1X3ByZXYsdl9wcmV2KTtkZW5zaXR5U3RlcChkZW5zLGRlbnNfcHJldix1LHYpO2RyYXdGcmFtZShuZXcgRmllbGQoZGVucyx1LHYpKTt9O3RoaXMucmVzZXQ9ZnVuY3Rpb24oKXtyb3dTaXplPXdpZHRoKzI7c2l6ZT0od2lkdGgrMikqKGhlaWdodCsyKTtkZW5zPW5ldyBBcnJheShzaXplKTtkZW5zX3ByZXY9bmV3IEFycmF5KHNpemUpO3U9bmV3IEFycmF5KHNpemUpO3VfcHJldj1uZXcgQXJyYXkoc2l6ZSk7dj1uZXcgQXJyYXkoc2l6ZSk7dl9wcmV2PW5ldyBBcnJheShzaXplKTtmb3IodmFyIGk9c2l6ZTtpLS07KXtkZW5zX3ByZXZbaV09dV9wcmV2W2ldPXZfcHJldltpXT1kZW5zW2ldPXVbaV09dltpXT0wO319O3RoaXMuc2V0UmVzb2x1dGlvbj1mdW5jdGlvbih3LGgpe3dpZHRoPXc7aGVpZ2h0PWg7dGhpcy5yZXNldCgpO307fQp2YXIgZ2V0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IuYmluZChkb2N1bWVudCksb249ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKGRvY3VtZW50KSxjYW52YXMsY29udGV4dCxzY2FsZSxkaXNwbGF5V2lkdGgsZGlzcGxheUhlaWdodCxmaWVsZFNpemU9NCxmaWVsZFdpZHRoLGZpZWxkSGVpZ2h0LG9teD0wLG9teT0wLG14PTAsbXk9MCxkZW5zaXR5PTIwMCxkcmF3aW5nPWZhbHNlLGJ1ZmZlcixidWZmZXJEYXRhLGZsdWlkO2Z1bmN0aW9uIGluaXRCdWZmZXIoKXt9CmZ1bmN0aW9uIHVwZGF0ZUZyYW1lKGZpZWxkKXtpZihkcmF3aW5nKXt2YXIgZHg9bXgtb214LGR5PW15LW9teSxsZW5ndGg9KE1hdGguc3FydChkeCpkeCtkeSpkeSkrMC41KXwwO2lmKGxlbmd0aDwxKWxlbmd0aD0xO2Zvcih2YXIgaT1sZW5ndGg7aS0tOyl7dmFyIHg9KChvbXgrZHgqaS9sZW5ndGgpL2Rpc3BsYXlXaWR0aCpmaWVsZFdpZHRoKXwwLHk9KChvbXkrZHkqaS9sZW5ndGgpL2Rpc3BsYXlIZWlnaHQqZmllbGRIZWlnaHQpfDA7ZmllbGQuc2V0VmVsb2NpdHkoeCx5LGR4LGR5KTtmaWVsZC5zZXREZW5zaXR5KHgseSxkZW5zaXR5KTt9Cm9teD1teDtvbXk9bXk7fX0KZnVuY3Rpb24gZHJhd0ZyYW1lKGZpZWxkKXtmb3IodmFyIHg9ZmllbGRXaWR0aDt4LS07KXtmb3IodmFyIHk9ZmllbGRIZWlnaHQ7eS0tOyl7YnVmZmVyRGF0YVsoeSpmaWVsZFdpZHRoK3gpKjQrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjMpXT1maWVsZC5nZXREZW5zaXR5KHgseSkqMHhmZjt9fQpjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsMCwwKTt9CmZ1bmN0aW9uIHVwZGF0ZUZsdWlkKCl7dXBkYXRlSUQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUZsdWlkKTtmbHVpZC51cGRhdGUoKTt9CmZ1bmN0aW9uIGdldE5vcm1IZWlnaHQoKXtyZXR1cm4gaW5uZXJIZWlnaHQvZmllbGRIZWlnaHQvZmllbGRTaXplO30KZnVuY3Rpb24gZ2V0Tm9ybVdpZHRoKCl7cmV0dXJuIGlubmVyV2lkdGgvZmllbGRXaWR0aC9maWVsZFNpemU7fQpmdW5jdGlvbiBzZXRTaXplKCl7ZGlzcGxheVdpZHRoPU1hdGgucm91bmQoaW5uZXJXaWR0aCk7ZGlzcGxheUhlaWdodD1NYXRoLnJvdW5kKGlubmVySGVpZ2h0KTtvbXg9ZGlzcGxheVdpZHRoLzI7b215PWRpc3BsYXlIZWlnaHQvMjtteD1vbXgrKE1hdGgucmFuZG9tKCktMC41KSo0O215PW9teSsoTWF0aC5yYW5kb20oKS0wLjUpKjQ7ZmllbGRXaWR0aD1NYXRoLnJvdW5kKGRpc3BsYXlXaWR0aC9maWVsZFNpemUpO2ZpZWxkSGVpZ2h0PU1hdGgucm91bmQoZGlzcGxheUhlaWdodC9maWVsZFNpemUpO2NhbnZhcy53aWR0aD1maWVsZFdpZHRoO2NhbnZhcy5oZWlnaHQ9ZmllbGRIZWlnaHQ7fQpmdW5jdGlvbiBpbml0KCl7Y2FudmFzPWdldCgnY2FudmFzJyk7dHJ5e2NvbnRleHQ9Y2FudmFzLmdldENvbnRleHQoJzJkJyk7fWNhdGNoKGUpe2dldCgnLmFsdCcpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztyZXR1cm47fQpzZXRTaXplKCk7dmFyIGJ1ZmZlckNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtidWZmZXJDYW52YXMud2lkdGg9ZmllbGRXaWR0aDtidWZmZXJDYW52YXMuaGVpZ2h0PWZpZWxkSGVpZ2h0O3RyeXtidWZmZXI9YnVmZmVyQ2FudmFzLmdldENvbnRleHQoJzJkJykuY3JlYXRlSW1hZ2VEYXRhKGZpZWxkV2lkdGgsZmllbGRIZWlnaHQpO2J1ZmZlckRhdGE9YnVmZmVyLmRhdGE7dmFyIHNpemU9ZmllbGRXaWR0aCpmaWVsZEhlaWdodCo0O2Zvcih2YXIgaT0zO2k8c2l6ZTtpKz00KXtidWZmZXJEYXRhW2ldPTB4ZmY7fX1jYXRjaChlKXtnZXQoJy5hbHQnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7cmV0dXJuO30KY2FudmFzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztpZihnZXQoJ2JvZHkubW9iaWxlJykpe2NhbnZhcy5vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oZXZlbnQpe2RyYXdpbmc9dHJ1ZTtvbXg9bXg9ZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WC9nZXROb3JtV2lkdGgoKTtvbXk9bXk9ZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WS9nZXROb3JtSGVpZ2h0KCk7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9O2NhbnZhcy5vbnRvdWNobW92ZT1mdW5jdGlvbihldmVudCl7bXg9ZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WC9nZXROb3JtV2lkdGgoKTtteT1ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZL2dldE5vcm1IZWlnaHQoKTt9O2NhbnZhcy5vbnRvdWNoZW5kPWZ1bmN0aW9uKCl7ZHJhd2luZz1mYWxzZTt9O31lbHNle2NhbnZhcy5vbm1vdXNlbW92ZT1mdW5jdGlvbihldmVudCl7bXg9ZXZlbnQuY2xpZW50WC9nZXROb3JtV2lkdGgoKTtteT1ldmVudC5jbGllbnRZL2dldE5vcm1IZWlnaHQoKTt9O30KZmx1aWQ9bmV3IEZsdWlkRmllbGQoKTtmbHVpZC5zZXRSZXNvbHV0aW9uKGNhbnZhcy53aWR0aCxjYW52YXMuaGVpZ2h0KTtkcmF3aW5nPXRydWU7dXBkYXRlRmx1aWQoKTt9Cm9uKCdET01Db250ZW50TG9hZGVkJyxpbml0KTt9KCkpOw==">
</script>
-->
<!-- <script src="neave_pixel-dust.2.js"></script> -->
<!-- <script src="neave_imagination.4.js"></script> -->
<!--
<script name="neave_imagination4_js"
src="data:/text/plain,base64,KGZ1bmN0aW9uKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGNhbGxiYWNrKXtzZXRUaW1lb3V0KGNhbGxiYWNrLDEwMDAvNjApO307dmFyIGdldD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yLmJpbmQoZG9jdW1lbnQpLG9uPWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIuYmluZChkb2N1bWVudCksY29udGV4dCxjYW52YXMsbW91c2VYLG1vdXNlWSxweCxweSxwb2ludHM9W10sc2l6ZT0wLHJlZD0wLGdyZWVuPTI1NSxibHVlPTI1NSxzcHJlYWQsTUFYX1NQUkVBRD0zLFNQRUVEX1g9MC4xNSxTUEVFRF9ZPTAuMTUsTUFYX0xFTkdUSD0xMjAsUkVEX1NURVA9MC4wMixHUkVFTl9TVEVQPTAuMDE1LEJMVUVfU1RFUD0wLjAyNTtmdW5jdGlvbiBQb2ludCh4LHksZHgsZHksc2l6ZSxjb2xvcil7dGhpcy54PXg7dGhpcy55PXk7dGhpcy5keD1keDt0aGlzLmR5PWR5O3RoaXMuc2l6ZT1zaXplO3RoaXMuY29sb3I9Y29sb3I7fQpQb2ludC5wcm90b3R5cGUuc3ByZWFkPWZ1bmN0aW9uKCl7dGhpcy54Kz10aGlzLmR4O3RoaXMueSs9dGhpcy5keTt9O2Z1bmN0aW9uIGRyYXdMaW5lcygpe3ZhciBwMCxwMSxwMix0b3RhbD1wb2ludHMubGVuZ3RoO2Zvcih2YXIgaT10b3RhbC0xO2k+MTtpLS0pe3AwPXBvaW50c1tpXTtwMT1wb2ludHNbaS0xXTtwMj1wb2ludHNbaS0yXTtjb250ZXh0LmJlZ2luUGF0aCgpO2NvbnRleHQuc3Ryb2tlU3R5bGU9cDAuY29sb3I7Y29udGV4dC5saW5lV2lkdGg9cDAuc2l6ZTtjb250ZXh0Lmdsb2JhbEFscGhhPWkvdG90YWw7Y29udGV4dC5tb3ZlVG8oKHAxLngrcDAueCkvMiwocDEueStwMC55KS8yKTtjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocDEueCxwMS55LChwMS54K3AyLngpLzIsKHAxLnkrcDIueSkvMik7Y29udGV4dC5zdHJva2UoKTtwMC5zcHJlYWQoKTt9CnBvaW50c1swXS5zcHJlYWQoKTtwb2ludHNbdG90YWwtMV0uc3ByZWFkKCk7fQpmdW5jdGlvbiBkcmF3KCl7dmFyIGR4PShtb3VzZVgtcHgpKlNQRUVEX1gsZHk9KG1vdXNlWS1weSkqU1BFRURfWTtpZihkeDwtc3ByZWFkKXtkeD0tc3ByZWFkO31lbHNlIGlmKGR4PnNwcmVhZCl7ZHg9c3ByZWFkO30KaWYoZHk8LXNwcmVhZCl7ZHk9LXNwcmVhZDt9ZWxzZSBpZihkeT5zcHJlYWQpe2R5PXNwcmVhZDt9CnB4PW1vdXNlWDtweT1tb3VzZVk7cG9pbnRzLnB1c2gobmV3IFBvaW50KHB4LHB5LGR4LGR5LE1hdGguYWJzKE1hdGguc2luKHNpemUrPTAuMTI1KSoxMCkrMSwncmdiKCcrCihNYXRoLmZsb29yKE1hdGguc2luKHJlZCs9UkVEX1NURVApKjEyOCsxMjgpKSsnLCcrCihNYXRoLmZsb29yKE1hdGguc2luKGdyZWVuKz1HUkVFTl9TVEVQKSoxMjgrMTI4KSkrJywnKwooTWF0aC5mbG9vcihNYXRoLnNpbihibHVlKz1CTFVFX1NURVApKjEyOCsxMjgpKSsnKScpKTtpZihwb2ludHMubGVuZ3RoPk1BWF9MRU5HVEgpcG9pbnRzLnNoaWZ0KCk7Y29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249J3NvdXJjZS1vdmVyJztjb250ZXh0Lmdsb2JhbEFscGhhPTE7Y29udGV4dC5maWxsU3R5bGU9J3JnYmEoMCwgMCwgMCwgMC4wNSknO2NvbnRleHQuZmlsbFJlY3QoMCwwLGNhbnZhcy53aWR0aCxjYW52YXMuaGVpZ2h0KTtjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0nbGlnaHRlcic7ZHJhd0xpbmVzKCk7ZHJhd0xpbmVzKCk7ZHJhd0xpbmVzKCk7fQpmdW5jdGlvbiB1cGRhdGUoKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlKTtkcmF3KCk7fQpmdW5jdGlvbiByZXNpemUoKXtjYW52YXMud2lkdGg9aW5uZXJXaWR0aDtjYW52YXMuaGVpZ2h0PWlubmVySGVpZ2h0O30KZnVuY3Rpb24gaW5pdCgpe2NhbnZhcz1nZXQoJ2NhbnZhcycpO3RyeXtjb250ZXh0PWNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO31jYXRjaChlKXtnZXQoJy5hbHQnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7cmV0dXJuO30KY2FudmFzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztjYW52YXMub25tb3VzZW1vdmU9ZnVuY3Rpb24oZXZlbnQpe21vdXNlWD1ldmVudC5wYWdlWDttb3VzZVk9ZXZlbnQucGFnZVk7fTtkb2N1bWVudC5vbm1vdXNlZW50ZXI9ZnVuY3Rpb24oZXZlbnQpe21vdXNlWD1ldmVudC5wYWdlWDttb3VzZVk9ZXZlbnQucGFnZVk7Zm9yKHZhciBpPXBvaW50cy5sZW5ndGg7aS0tOyl7cG9pbnRzW2ldLng9bW91c2VYO3BvaW50c1tpXS55PW1vdXNlWTt9fTtjYW52YXMub250b3VjaG1vdmU9ZnVuY3Rpb24oZXZlbnQpe21vdXNlWD1ldmVudC50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYO21vdXNlWT1ldmVudC50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZO3NwcmVhZD0xO307Y2FudmFzLm9udG91Y2hzdGFydD1mdW5jdGlvbihldmVudCl7c3ByZWFkPTA7bW91c2VYPWV2ZW50LnRhcmdldFRvdWNoZXNbMF0ucGFnZVg7bW91c2VZPWV2ZW50LnRhcmdldFRvdWNoZXNbMF0ucGFnZVk7Zm9yKHZhciBpPXBvaW50cy5sZW5ndGg7aS0tOyl7cG9pbnRzW2ldLng9bW91c2VYO3BvaW50c1tpXS55PW1vdXNlWTt9CmlmKCFldmVudC50YXJnZXQuaHJlZil7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9fTt3aW5kb3cub25yZXNpemU9cmVzaXplO3Jlc2l6ZSgpO21vdXNlWD1jYW52YXMud2lkdGgvMjttb3VzZVk9Y2FudmFzLmhlaWdodC8yO3VwZGF0ZSgpO30Kb24oJ0RPTUNvbnRlbnRMb2FkZWQnLGluaXQpO30oKSk7">
</script>
-->
</head>
<body bgcolor=linen>
<!-- <a class="neave" href="https://neave.com"><img src="./imgs/btn/koeye.png</a> -->
<!-- <a name="neave" href="https://neave.com/" target="_blank"> <img src="index_neave_pi_data/a--%252520canvas%252520width392%252520height221%252520styledisplay%25.html"> </a> -->
<!-- <canvas width=800 height=600 style='display: block;"></canvas> -->
<!-- <canvas width="1200" height="800" "="" style="display: block;"></canvas> -->
<canvas width=1200 height=800" style="display: block;"></canvas>
</body>
</html>
//
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