//JKPlot.mini function JKPlot(){var canvas=document.getElementById("Grafik"),ctx=canvas.getContext("2d"); ctx.font="15px Arial";var xorigin=300,yorigin=0,x1=0.0,x2=1.0,y1=0.0,y2=1.0,nx=100,ny=100, logx=false,logy=false,labx="X=",laby="Y=",labdx="X=",labdy="Y=",leftrim=30,toprim=20, rightrim=10,botrim=35,xs=1.0,ys=1.0,ix=0,iy=0,ixp=0,iyp=0;this.setup=setup;this.setupSimpleRim=setupSimpleRim; this.setXrange=setXrange;this.setYrange=setYrange;this.setXlog=setXlog;this.setYlog=setYlog; this.setXlabel=setXlabel;this.setYlabel=setYlabel;this.wipe=wipe;this.makeFrame=makeFrame; this.clear=clear;this.startCurve=startCurve;this.addCurve=addCurve;this.addSkip=addSkip; this.addScopeCurve=addScopeCurve;this.setCurveColour=setCurveColour;this.makePoint=makePoint;this.makeSquare=makeSquare; this.makeSquareDirection=makeSquareDirection;this.makeCircle=makeCircle;this.makeFillCircle=makeFillCircle; this.makeText=makeText;this.makeTextRel=makeTextRel;this.getPosition=getPosition;this.displayPosition=displayPosition; this.setOrigin=setOrigin;function setOrigin(x,y){xorigin=x;yorigin=y;}function setup(nxi,lgxi,x1i,x2i,labxi,labdxi, nyi,lgyi,y1i,y2i,labyi,labdyi){nx=nxi;ny=nyi;logx=lgxi;logy=lgyi;x1=x1i;x2=x2i;y1=y1i;y2=y2i;if(logx){ xs=(nx-leftrim-rightrim)/log10(x2/x1);}else{xs=(nx-leftrim-rightrim)/(x2-x1);}if(logy){ ys=-(ny-toprim-botrim)/log10(y2/y1);}else{ys=-(ny-toprim-botrim)/(y2-y1);}labx=labxi;laby=labyi; labdx=labdxi;labdy=labdyi;this.x1=x1;this.x2=x2;this.y1=y1;this.y2=y2;}function setupSimpleRim(nxi,lgxi,x1i,x2i,labxi,labdxi, nyi,lgyi,y1i,y2i,labyi,labdyi,rim){leftrim=rim;toprim=rim;rightrim=rim;botrim=rim;nx=nxi;ny=nyi;logx=lgxi;logy=lgyi; x1=x1i;x2=x2i;y1=y1i;y2=y2i;if(logx){xs=(nx-leftrim-rightrim)/log10(x2/x1);}else{xs=(nx-leftrim-rightrim) /(x2-x1);}if(logy){ys=-(ny-toprim-botrim)/log10(y2/y1);}else{ys=-(ny-toprim-botrim)/(y2-y1);}labx=labxi; laby=labyi;labdx=labdxi;labdy=labdyi;this.x1=x1;this.x2=x2;this.y1=y1;this.y2=y2;}function setXlabel(s){labdx=s;} function setYlabel(s){labdy=s;}function setXlog(x){logx=x;}function setYlog(x){logy=x;}function setXrange(x1i,x2i) {x1=x1i;x2=x2i;if(logx){xs=(nx-leftrim-rightrim)/log10(x2/x1);}else{xs=(nx-leftrim-rightrim)/(x2-x1);}this.x1=x1; this.x2=x2;}function setYrange(y1i,y2i){y1=y1i;y2=y2i;if(logy){ys=-(ny-toprim-botrim)/log10(y2/y1);}else{ ys=-(ny-toprim-botrim)/(y2-y1);}this.y1=y1;this.y2=y2;}function wipe(){ctx.fillStyle="white";ctx.fillRect(0,0,nx,ny);} function makeFrame(){ctx.lineWidth=2;ctx.strokeStyle="black";ctx.strokeRect(leftrim,toprim,(nx-leftrim-rightrim), (ny-toprim-botrim));}function clear(){wipe();makeFrame();ctx.fillStyle="black";ctx.fillText(labdx,nx/2, ny-3); ctx.fillText(labdy,leftrim+10,15);makeTheTicks();}function trafoX(x){if(logx){if(x<=0.0)return leftrim; return leftrim+log10(x/x1)*xs;}else{return leftrim+(x-x1)*xs;}}function trafoY(y){if(logy){if(y<=0.0)return ny-botrim; return toprim+log10(y/y2)*ys;}else{return toprim+(y-y2)*ys;}}function startCurve(x,y,lw,c){ctx.lineWidth=lw; ctx.strokeStyle=c;ix=trafoX(x);iy=trafoY(y);}function addCurve(x,y){ctx.beginPath();ctx.moveTo(ix,iy);ixp=ix;iyp=iy;ix=trafoX(x); iy=trafoY(y);ctx.lineTo(ix,iy);ctx.stroke();}function addSkip(x,y){ixp=ix; iyp=iy;ix=trafoX(x);iy=trafoY(y);ctx.moveTo(ix,iy);} function addScopeCurve(x,y,k){ctx.fillStyle="white";ctx.fillRect(ix,0,k,ny);ctx.stroke();ctx.beginPath();ctx.moveTo(ix,iy);ixp=ix; iyp=iy;ix=trafoX(x);iy=trafoY(y);ctx.lineTo(ix,iy);ctx.stroke();}function setCurveColour(c){ctx.lineWidth=1;ctx.strokeStyle=c;} function makePoint(x,y,c){var xc=trafoX(x);var yc=trafoY(y);ctx.lineWidth=1;ctx.strokeStyle=c;ctx.beginPath();ctx.moveTo(xc,yc-1); ctx.lineTo(xc,yc+1);ctx.closePath();ctx.stroke();}function makeSquare(x,y,k,c){var xc=trafoX(x);var yc=trafoY(y);ctx.lineWidth=1; ctx.strokeStyle=c;ctx.beginPath();ctx.moveTo(xc-k,yc-k);ctx.lineTo(xc-k,yc+k);ctx.lineTo(xc+k,yc+k);ctx.lineTo(xc+k,yc-k); ctx.closePath();ctx.stroke();} function makeSquareDirection(x,y,vx,vy,k,c){var xc=trafoX(x);var yc=trafoY(y);ctx.lineWidth=1; ctx.strokeStyle=c;ctx.beginPath();ctx.moveTo(xc-k,yc-k);ctx.lineTo(xc-k, yc+k);ctx.lineTo(xc+k,yc+k);ctx.lineTo(xc+k, yc-k); ctx.closePath();ctx.stroke();ctx.beginPath();ctx.moveTo(xc,yc);var v=Math.sqrt(vx*vx+vy*vy);ctx.lineTo(xc+10*k*vx/v,yc-10*k*vy/v); ctx.stroke();}function makeCircle(x,y,k,c){ctx.lineWidth=1;ctx.strokeStyle=c;ctx.beginPath();ctx.arc(trafoX(x),trafoY(y),k,0,2*Math.PI); ctx.stroke();}function makeFillCircle(x,y,k,c){ctx.lineWidth=1;ctx.strokeStyle=c;ctx.fillStyle=c;ctx.beginPath();ctx.arc(trafoX(x),trafoY(y),k,0,2*Math.PI);ctx.stroke();ctx.fill();} function makeTheTicks(){ctx.lineWidth=1;ctx.strokeStyle="black";if(logx){makeLogXticks(1.0,20,true);makeLogXticks(2.0,10,false); makeLogXticks(3.0,10,false);makeLogXticks(4.0,10,false);makeLogXticks(5.0,15,false);makeLogXticks(6.0,10,false);makeLogXticks(7.0,10,false); makeLogXticks(8.0,10,false);makeLogXticks(9.0,10,false);}else{makeLinearXticks();}if(logy){makeLogYticks(1.0,20,true);makeLogYticks(2.0,10,false); makeLogYticks(3.0,10,false);makeLogYticks(4.0,10,false);makeLogYticks(5.0,15,false);makeLogYticks(6.0,10,false);makeLogYticks(7.0,10,false); makeLogYticks(8.0,10,false);makeLogYticks(9.0,10,false);}else{makeLinearYticks();}}function makeLinearXticks(){ var hmax=Math.max(Math.abs(x1),Math.abs(x2));var sf=Math.pow(10,Math.floor(log10(hmax)));var range=Math.abs(x1-x2);var relrange=range/hmax; if(relrange>1.999){makeXticks(10.0,20,sf);makeXticks(5.0,15,sf);makeXticks(1.0,10,sf);makeXticks(0.5,7,sf);makeXticks(0.1,5,sf); }else if(relrange>0.999){makeXticks(5.0,20,sf);makeXticks(1.0,15,sf);makeXticks(0.5,10,sf);makeXticks(0.1,7,sf);}else if(relrange>0.99){makeXticks (10.0,20,sf);makeXticks(5.0,15,sf);makeXticks(1.0,10,sf);makeXticks(0.5,7,sf);}else if(relrange>0.9){makeXticks(1.0,20,sf);makeXticks(0.5,15,sf); makeXticks(0.1,10,sf);}else if(relrange>0.5){makeXticks(1.0,20,sf);makeXticks(0.5,15,sf);makeXticks(0.1,10,sf);}else if(relrange>0.1){makeXticks (1.0,20,sf);makeXticks(0.1,15,sf);makeXticks(0.05,10,sf);makeXticks(0.01,7,sf);}else if(relrange>0.01){makeXticks(1.0,20,sf);makeXticks(0.1,20,sf); makeXticks(0.05,20,sf);makeXticks(0.01,15,sf);makeXticks(0.005,10,sf);makeXticks(0.001,7,sf);}}function makeXticks(d,k,sf){if(Math.abs(d*sf*xs)<5) return;var b=Math.abs(d*sf*xs)>50;for(var x=-10*sf;x<10*sf;x+=d*sf){if(x1<=x&&x<=x2)xtick(x,k,b);}}function makeLogXticks(d,k,b){var xx;for(var x=-10;x<10;x++){ xx=Math.pow(10.0,x)*d;if(x1<=xx&&xx<=x2)xtick(xx,k,b);}}function xtick(x,k,b){ctx.beginPath();ctx.moveTo(trafoX(x),trafoY(y1)); ctx.lineTo(trafoX(x),trafoY(y1)-k);ctx.moveTo(trafoX(x),trafoY(y2));ctx.lineTo(trafoX(x),trafoY(y2)+k);ctx.stroke();if(b){ var str=cutNumberString(x,5);ctx.fillText(str,trafoX(x)-str.length*5,ny-botrim+17);}}function makeLinearYticks(){ var hmax=Math.max(Math.abs(y1),Math.abs(y2));var sf=Math.pow(10,Math.floor(log10(hmax)));var range=Math.abs(y1-y2); var relrange=range/hmax;if(relrange>1.999){makeYticks(10.0,20,sf);makeYticks(5.0,15,sf);makeYticks(1.0,10,sf);makeYticks(0.5,7,sf); makeYticks(0.1,5,sf);}else if(relrange>0.999){makeYticks(5.0,20,sf);makeYticks(1.0,15,sf);makeYticks(0.5,10,sf);makeYticks(0.1,7,sf);} else if(relrange>0.99){makeYticks(10.0,20,sf);makeYticks(5.0,15,sf);makeYticks(1.0,10,sf);makeYticks(0.5,7,sf);}else if(relrange>0.9){ makeYticks(1.0,20,sf);makeYticks(0.5,15,sf);makeYticks(0.1,10,sf);}else if(relrange>0.1){ makeYticks(1.0,20,sf);makeYticks(0.1,15,sf);makeYticks(0.05,10,sf);makeYticks(0.01,7,sf);}else if(relrange>0.01){makeYticks(1.0,20,sf); makeYticks(0.1,20,sf);makeYticks(0.05,20,sf);makeYticks(0.01,15,sf);makeYticks(0.005,10,sf);makeYticks(0.001,7,sf);}}function makeYticks(d,k,sf) {if(Math.abs(d*sf*ys)<3)return;var b=Math.abs(d*sf*ys)>30;for(var y=-10*sf;y<10*sf;y+=d*sf){if(y1<=y&&y<=y2)ytick(y,k,b);}}function makeLogYticks(d,k,b){var yy;for(var y=-10;y<10;y++){yy=Math.pow(10.0,y)*d;if(y1<=yy&&yy<=y2)ytick(yy,k,b);}}function ytick(y,k,b) {ctx.beginPath();ctx.moveTo(trafoX(x1),trafoY(y));ctx.lineTo(trafoX(x1)+k,trafoY(y));ctx.moveTo(trafoX(x2),trafoY(y)); ctx.lineTo(trafoX(x2)-k,trafoY(y));ctx.stroke();if(b){var str=cutNumberString(y,2);ctx.fillText(str,5,trafoY(y)+7);}}function makeText (str,c,x,y){ctx.fillStyle=c;ctx.fillText(str,trafoX(x)-str.length*2,trafoY(y));}function makeTextRel(str,c,x,y){ctx.fillStyle=c; ctx.fillText(str,nx*x-str.length*2,ny*(1-y));}function makeTextPix(str,c,x,y){ctx.fillStyle=c;ctx.fillText(str,x-str.length*2,y);} function displayPosition(e){var x,y;if(window.event){x=window.event.clientX;y=window.event.clientY;}else{x=e.pageX;y=e.pageY;} var x0=xorigin+leftrim,y0=yorigin+toprim;if(logx){x=x1*Math.pow(10.0,(x-x0)/xs);}else{x=x1+(x-x0)/xs;}if(logy){y=y2*Math.pow(10.0, (y-y0)/ys);}else{y=y2+(y-y0)/ys;}x=cutNumber(x,3);y=cutNumber(y,3);document.getElementById("xyout").innerHTML=labx+x+"
"+laby+y;} function getPosition(e){var x,y;if(window.event){x=window.event.clientX;y=window.event.clientY;}else{x=e.pageX;y=e.pageY;} var x0=xorigin+leftrim,y0=yorigin+toprim;if(logx){x=x1*Math.pow(10.0,(x-x0)/xs);}else{x=x1+(x-x0)/xs;}if(logy){y=y2*Math.pow(10.0, (y-y0)/ys);}else{y=y2+(y-y0)/ys;}this.xnow=x;this.ynow=y;}function cutNumberString(x,k){var xx=Math.max(1.0e-4,Math.abs(x)), yn=Math.floor(log10(xx)),yk=Math.pow(10.0,k),y=Math.pow(10.0,k-Math.floor(log10(xx)));if(x<1.0e-4){ return(Math.floor(x*y+0.5)/y).toString();}else if(x<10000){return(Math.floor(x*y+0.5)/y).toString();}else{return(Math.floor( x*y+0.5)/yk).toString()+"e"+yn.toString();}}function cutNumber(x,k){var xx=Math.max(1.0e-4,Math.abs(x)),y=Math.pow(10.0, k-Math.floor(log10(xx)));return Math.floor(x*y+0.5)/y;}function log10(x){if(x<=0)return -1000;return 0.4343*Math.log(x);}}