var my={};function functiongraphslopeMain(){this.version='1.12';w=570;h=560;my.svgQ=false;my.svg=new SVG();my.fnN=1;graphLt=0;graphTp=0;graphWd=550;graphHt=340;coords=new Coords(graphLt,graphTp,graphWd,graphHt,-5,-3,5,3,true);canvasWd=graphWd;canvasHt=graphHt;clrs=["darkblue","orange"];var s='';s+='
';var yPos=20;for(var i=0;iy =
';s+='';yPos+=30;} yPos+=10;s+='
Zoom:
';s+='';s+='';s+='';s+='';s+='';s+='
';s+='
a:
';s+='
1
';s+='';s+='
' s+='
';s+='';s+='';s+='';s+='
' if(my.svgQ){s+='';} s+='
';s+='';s+='
';s+='';s+='
';s+='
';s+='
© 2017 MathsIsFun.com v'+this.version+'
';s+='';s+='';document.write(s);el=document.getElementById('gfx0');ratio=3;el.width=canvasWd*ratio;el.height=canvasHt*ratio;el.style.width=canvasWd+"px";el.style.height=canvasHt+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);g.translate(0.5,0.5);el2=document.getElementById('gfx1');ratio=3;el2.width=canvasWd*ratio;el2.height=canvasHt*ratio;el2.style.width=canvasWd+"px";el2.style.height=canvasHt+"px";g2=el2.getContext("2d");g2.setTransform(ratio,0,0,ratio,0,0);g2.translate(0.5,0.5);examples=['ln(x)','e^x','sin(x)'];exampleNo=0;currZoom=1;polarQ=false;aVal=1;var inStr=getQueryVariable('func1');if(inStr){inStr=decodeURIComponent(inStr);document.getElementById('f0').value=inStr;} inStr=getQueryVariable('func2');if(inStr){inStr=decodeURIComponent(inStr);document.getElementById('f1').value=inStr;} if(inStr=getQueryVariable('xmin'))coords.xStt=parseFloat(inStr);if(inStr=getQueryVariable('xmax'))coords.xEnd=parseFloat(inStr);if(inStr=getQueryVariable('ymin'))coords.yStt=parseFloat(inStr);if(inStr=getQueryVariable('ymax'))coords.yEnd=parseFloat(inStr);coords.calcScale();parser=new Parser();dragging=false;downX=0;downY=0;prevX=0;prevY=0;el2.addEventListener("mousedown",mouseDownListener,false);window.addEventListener("mousemove",mouseMoveListener,false);window.addEventListener("mouseup",mouseUpListener,false);el2.addEventListener('touchstart',ontouchstart,false);window.addEventListener('touchmove',ontouchmove,false);window.addEventListener('touchend',ontouchend,false);document.getElementById('f0').value='x^2';my.pts=[];my.ptsQ=true;var shapeRad=9;my.minX=shapeRad;my.maxX=graphWd-shapeRad;my.minY=shapeRad;my.maxY=graphHt-shapeRad;my.fnLine=[];my.dragPtQ=false;makePts();redraw();} function redraw(){doGraph();if(my.ptsQ){drawPts();}else{g2.clearRect(0,0,el2.width,el2.height);}} function makePts(){var i;var tempX;var tempY;var tempColor;var pos=[[140,80,"A"],[420,240,"B"]];my.pts=[];for(i=0;i11)my.fixed=11;var i;var g=g2;g2.clearRect(0,0,el2.width,el2.height);var dbg="";for(i=0;i=2)doSlope(my.pts[0],my.pts[1]);} function doSlope(p0,p1){var g=g2;s='';var pxd=dist(coords.toXPix(p0.xVal)-coords.toXPix(p1.xVal),coords.toYPix(p0.yVal)-coords.toYPix(p1.yVal));if(pxd<4){s+='too close';var xMid=(coords.toXPix(p0.xVal)+coords.toXPix(p1.xVal))/2 var yMid=(coords.toYPix(p0.yVal)+coords.toYPix(p1.yVal))/2;g.fillStyle='rgba(255,100,0,0.8)';g.font='bold 26px Arial';g.fillText('?',xMid+20,yMid+10)}else{g.strokeStyle='rgba(255,100,0,0.5)';g.lineWidth=3;g.beginPath();if(p0.xVal>p1.xVal){var temp=p0;p0=p1;p1=temp;} g.moveTo(p0.getPxX(),p0.getPxY());g.lineTo(p1.getPxX(),p1.getPxY());g.fill();g.stroke();var xstr0=fmt1(p0.xVal);var ystr0=fmt1(p0.yVal);var xstr1=fmt1(p1.xVal);var ystr1=fmt1(p1.yVal);var x0=parseFloat(xstr0);var y0=parseFloat(ystr0);var x1=parseFloat(xstr1);var y1=parseFloat(ystr1);var m=(p0.yVal-p1.yVal)/(p0.xVal-p1.xVal);if(x0-x1==0){s+='vertical slope';}else{s+="Slope = ";if(y1<0)ystr1='('+ystr1+')';s+="("+ystr0+" - "+ystr1+")";s+=" / ";if(x1<0)xstr1='('+xstr1+')';s+="("+xstr0+" - "+xstr1+")";s+="\n" s+=" = ";s+=fmt1(y0-y1);s+=" / ";s+=fmt1(x0-x1);s+="\n" s+=" = ";s+=fmt(m,4);} var xMid=(coords.toXPix(p0.xVal)+coords.toXPix(p1.xVal))/2 var yMid=(coords.toYPix(p0.yVal)+coords.toYPix(p1.yVal))/2;g.fillStyle='rgba(255,100,0,0.8)';g.font='bold 16px Arial';g.fillText(fmt(m,4),xMid+10,yMid+10)} var div=document.getElementById('info');div.value=s;} function drawSlopeHuh(e){g.clear();var d0=drags[0];var ln=new Line(d0.getPt(),d0.getPt());slopeAngle+=0.03;ln.setAngle(slopeAngle);ln.setLen(200,true);g.lineStyle(4,'#ff4400',0.6);HiGraphics.drawLine(g,ln.a.x,ln.a.y,ln.b.x,ln.b.y);} function fmt(num,digits){if(num==Number.POSITIVE_INFINITY) return "undefined";if(num==Number.NEGATIVE_INFINITY) return "undefined";num=num.toPrecision(digits);num=num.replace(/0+$/,"");if(num.charAt(num.length-1)==".")num=num.substr(0,num.length-1);if(Math.abs(num)<1e-15)num=0;return num;} function fmt1(num){if(num==Number.POSITIVE_INFINITY) return "undefined";if(num==Number.NEGATIVE_INFINITY) return "undefined";digits=my.fixed;num=num.toFixed(digits);num=num.replace(/0+$/,"");if(num.charAt(num.length-1)==".")num=num.substr(0,num.length-1);if(Math.abs(num)<1e-15)num=0;return num;} function hitTest(pt,mx,my){var dx;var dy;dx=mx-pt.getPxX();dy=my-pt.getPxY();return(dx*dx+dy*dy0){s+="func1="+encodeURIComponent(f0)+"&";} var f1=document.getElementById('f1').value;if(f1.length>0){s+="func2="+encodeURIComponent(f1)+"&";} s+="xmin="+coords.xStt.toPrecision(4)+"&";s+="xmax="+coords.xEnd.toPrecision(4)+"&";s+="ymin="+coords.yStt.toPrecision(4)+"&";s+="ymax="+coords.yEnd.toPrecision(4)+"&";s=s.substr(0,s.length-1);return(s);} function linkPopClose(){var pop=document.getElementById('linkpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-500px';} function onaChg(n,v){aVal=v;var div=document.getElementById('aval');div.innerHTML=v;div.style.left=(170+v*100)+'px';redraw();} function togglePts(){my.ptsQ=!my.ptsQ;toggleBtn('ptsBtn',my.ptsQ);toggleBtn('fitBtn',my.ptsQ);redraw();} function togglePolar(){polarQ=!polarQ;toggleBtn('polarBtn',polarQ);redraw();} function toggleBtn(btn,onq){if(onq){document.getElementById(btn).classList.add("hi");document.getElementById(btn).classList.remove("lo");}else{document.getElementById(btn).classList.add("lo");document.getElementById(btn).classList.remove("hi");}} function zoomReset(){coords=new Coords(graphLt,graphTp,graphWd,graphHt,-5,-3,5,3,true);redraw();} function zoomFit(){var valPts=[];for(var i=0;imy.maxX)?my.maxX:posX);posY=mouseY-dragHoldY;posY=(posYmy.maxY)?my.maxY:posY);var pt=my.pts[dragIndex];pt.setPx(posX,posY);pt.snap(my.fnLine);drawPts();}else{if(Math.abs(mouseX-downX)<2&&Math.abs(mouseY-downY)<2){coords.newCenter(mouseX,mouseY);redraw();}} my.dragPtQ=false;dragging=false;} function mouseMoveListener(evt){var bRect=el.getBoundingClientRect();var mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);var mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);if(dragging){if(my.dragPtQ){posX=mouseX-dragHoldX;posX=(posXmy.maxX)?my.maxX:posX);posY=mouseY-dragHoldY;posY=(posYmy.maxY)?my.maxY:posY);var pt=my.pts[dragIndex];pt.setPx(posX,posY);pt.snap(my.fnLine);drawPts();}else{var moveX=prevX-mouseX;var moveY=mouseY-prevY;if(Math.abs(moveX)>1||Math.abs(moveY)>1){coords.drag(moveX,moveY);redraw();prevX=mouseX;prevY=mouseY;}}}} function onZoomChg(n,v){var scaleBy=(v*2+0.01)/currZoom;coords.scale(scaleBy);currZoom*=scaleBy;if(n==1){currZoom=1;document.getElementById('r1').value=0.5;} redraw();} function drawPlot(plotType,gaps){gaps=null;switch(plotType){case "implicit":drawNewton(1);break;case "newton2":drawNewton(2);break;case "signchange":drawImplicitSign(2,plotType);break;case "shaded":drawShaded(2,plotType);break;default:} var breakQ=true;var prevxPix=-1;var prevyPix=-1;var yState=9;var ptNumMin;var ptNumMax;switch(plotType){case "xy":case "dydx":ptNumMin=0;ptNumMax=coords.width;break;case "polar":var revFrom=0;var revTo=4;var angle0=revFrom*6.2832;var angle1=revTo*6.2832;points=Math.min(Math.max(600,(revTo-revFrom)*250),3000);stepSize=(angle1-angle0)/points;if(stepSize==0) stepSize=1;ptNumMin=Math.floor(angle0/stepSize);ptNumMax=Math.ceil(angle1/stepSize);break;case "para":var tFrom=0;var tTo=3;var points=Math.min(Math.max(600,(tTo-tFrom)*250),3000);var stepSize=(tTo-tFrom)/points;if(stepSize==0) stepSize=1;ptNumMin=Math.floor(tFrom/stepSize);ptNumMax=Math.ceil(tTo/stepSize);break;default:} var line=[];var prevxVal=Number.NEGATIVE_INFINITY;var prevyVal=Number.NEGATIVE_INFINITY;var recipdx=1/coords.xScale;for(var ptNum=0;ptNum<=ptNumMax;ptNum++){var xVal;var yVal;var xPix;var yPix;switch(plotType){case "xy":xPix=ptNum;xVal=coords.xStt+xPix*coords.xScale;parser.setVarVal("x",xVal);yVal=parser.getVal();yPix=coords.toYPix(yVal,false);break;case "dydx":xPix=ptNum;xVal=coords.xStt+xPix*coords.xScale;parser.setVarVal("x",xVal);var thisyVal=parser.getVal();yVal=(thisyVal-prevyVal)*recipdx;prevyVal=thisyVal;break;case "polar":var angle=ptNum*stepSize;parser.setVarVal("x",angle);var radius=parser.getVal();xVal=radius*Math.cos(angle);yVal=radius*Math.sin(angle);break;case "para":xPix=ptNum;var t=coords.xStt+xPix*coords.xScale;var xy=conicVals(t);xVal=xy[0];yVal=xy[1];if(this.vals["b"]>1.1){if(yVal<-0.95&&yVal>-1.05){pt1[0]=xy[0];pt1[1]=xy[1];}}else{if(yVal<-this.vals["b"]*0.7&&yVal>-this.vals["b"]*0.8){pt1[0]=xy[0];pt1[1]=xy[1];}} break;default:} var prevbreakQ=breakQ;breakQ=false;var prevyState=yState;yState=0;if(yValcoords.yEnd) yState=1;if(yVal==Number.NEGATIVE_INFINITY){yState=-1;yVal=coords.yStt-coords.yScale*10;} if(yVal==Number.POSITIVE_INFINITY){yState=1;yVal=coords.yEnd+coords.yScale*10;} breakQ=prevyState*yState!=0;if(isNaN(yVal)){yState=9;breakQ=true;} if(plotType=="polar"||plotType=="para"){xVal=Math.min(Math.max(coords.xStt-coords.xScale*10,xVal),coords.xEnd+coords.xScale*10);xPix=(xVal-coords.xStt)/coords.xScale;} yVal=Math.min(Math.max(coords.yStt-coords.yScale*10,yVal),coords.yEnd+coords.yScale*10);yPix=(coords.yEnd-yVal)/coords.yScale;if(breakQ){if(prevbreakQ){}else{if(yState<9){line.push([xPix,yPix]);}}}else{if(prevbreakQ){if(prevyState<9){line.push(0);line.push([prevxPix,prevyPix]);line.push([xPix,yPix]);}else{line.push(0);line.push([xPix,yPix]);}}else{line.push([xPix,yPix]);}} prevxVal=xVal;prevxPix=xPix;prevyPix=yPix;} if(my.svgQ)my.svg=new SVG();var sttQ=true;g.beginPath();for(var i=0,len=line.length;i0){s=s.substr(0,1000);parser.radiansQ=this.radQ;parser.setVarVal('a',aVal);parser.newParse(s);g.strokeStyle=clrs[i];g.lineWidth=1.5;if(polarQ){drawPlot('polar');}else{drawPlot('xy');}}} var end=new Date().getTime();var time=end-start;g.fillStyle="#000000";g.strokeStyle="#000000";g.font="bold 14px Verdana";g.textAlign="center";var anss=[];for(var i=0;i=coords.xStt&&ansthis.xEnd){temp=this.xStt;this.xStt=this.xEnd;this.xEnd=temp;} if(this.yStt>this.yEnd){temp=this.yStt;this.yStt=this.yEnd;this.yEnd=temp;} var xSpan=this.xEnd-this.xStt;if(xSpan<=0)xSpan=1e-9;this.xScale=xSpan/this.width;this.xLogScale=(Math.log(this.xEnd)-Math.log(this.xStt))/this.width;var ySpan=this.yEnd-this.yStt;if(ySpan<=0)ySpan=1e-9;this.yScale=ySpan/this.height;this.yLogScale=(Math.log(this.yEnd)-Math.log(this.yStt))/this.height;if(this.uniScaleQ&&!this.xLogQ&&!this.yLogQ){var newScale=Math.max(this.xScale,this.yScale);this.xScale=newScale;xSpan=this.xScale*this.width;var xMid=(this.xStt+this.xEnd)/2;this.xStt=xMid-xSpan/2;this.xEnd=xMid+xSpan/2;this.yScale=newScale;ySpan=this.yScale*this.height;var yMid=(this.yStt+this.yEnd)/2;this.yStt=yMid-ySpan/2;this.yEnd=yMid+ySpan/2;}};Coords.prototype.scale=function(factor,xMid,yMid){if(typeof xMid=='undefined')xMid=(this.xStt+this.xEnd)/2;this.xStt=xMid-(xMid-this.xStt)*factor;this.xEnd=xMid+(this.xEnd-xMid)*factor;if(typeof yMid=='undefined')yMid=(this.yStt+this.yEnd)/2;this.yStt=yMid-(yMid-this.yStt)*factor;this.yEnd=yMid+(this.yEnd-yMid)*factor;this.calcScale();};Coords.prototype.drag=function(xPix,yPix){this.xStt+=xPix*this.xScale;this.xEnd+=xPix*this.xScale;this.yStt+=yPix*this.yScale;this.yEnd+=yPix*this.yScale;this.calcScale();};Coords.prototype.newCenter=function(x,y){var xMid=this.xStt+x*this.xScale;var xhalfspan=(this.xEnd-this.xStt)/2;this.xStt=xMid-xhalfspan;this.xEnd=xMid+xhalfspan;var yMid=this.yEnd-y*this.yScale;var yhalfspan=(this.yEnd-this.yStt)/2;this.yStt=yMid-yhalfspan;this.yEnd=yMid+yhalfspan;this.calcScale();};Coords.prototype.fitToPts=function(pts,borderFactor){for(var i=0;i=3.6){if(majorQ){return(5*pow10);}else{return(1*pow10);}} if(mantissa>=2.2){if(majorQ){return(2*pow10);}else{return(0.2*pow10);}} if(mantissa>=1.3){if(majorQ){return(0.5*pow10);}else{return(0.2*pow10);}} if(mantissa>=0.6){if(majorQ){return(0.5*pow10);}else{return(0.1*pow10);}} if(majorQ){return(0.2*pow10);}else{return(0.1*pow10);}};function Graph(g,coords){this.g=g;this.coords=coords;this.xLinesQ=true;this.yLinesQ=true;this.xValsQ=true;this.yValsQ=true;this.skewQ=false;} Graph.prototype.makeSVG=function(){this.hzAxisY=coords.toYPix(0);if(this.hzAxisY<0)this.hzAxisY=0;if(this.hzAxisY>coords.height)this.hzAxisY=coords.height;this.hzNumsY=this.hzAxisY+14;if(this.hzAxisY>coords.height-10)this.hzNumsY=coords.height-3;this.vtAxisX=coords.toXPix(0);if(this.vtAxisX<0)this.vtAxisX=0;if(this.vtAxisX>coords.width)this.vtAxisX=coords.width;this.vtNumsX=this.vtAxisX-5;if(this.vtAxisX<10)this.vtNumsX=20;my.svg.moveTo(coords.toXPix(coords.xStt,false),this.hzAxisY);my.svg.lineTo(coords.toXPix(coords.xEnd,false),this.hzAxisY);my.svg.moveTo(this.vtAxisX,coords.toYPix(coords.yStt,false));my.svg.lineTo(this.vtAxisX,coords.toYPix(coords.yEnd,false));} Graph.prototype.drawGraph=function(){this.hzAxisY=coords.toYPix(0);if(this.hzAxisY<0)this.hzAxisY=0;if(this.hzAxisY>coords.height)this.hzAxisY=coords.height;this.hzNumsY=this.hzAxisY+14;if(this.hzAxisY>coords.height-10)this.hzNumsY=coords.height-3;this.vtAxisX=coords.toXPix(0);if(this.vtAxisX<0)this.vtAxisX=0;if(this.vtAxisX>coords.width)this.vtAxisX=coords.width;this.vtNumsX=this.vtAxisX-5;this.vtNumsAlign='right';if(this.vtAxisX<30){this.vtNumsX=this.vtAxisX+4;this.vtNumsAlign='left';if(this.vtAxisX<0){this.vtNumsX=6;}} if(coords.xLogQ){this.drawLinesLogX();}else{if(this.xLinesQ){this.drawHzLines();}} if(coords.yLogQ){this.drawLinesLogY();}else{if(this.yLinesQ){this.drawVtLines();}}};Graph.prototype.drawVtLines=function(){var g=this.g;g.lineWidth=1;var ticks=coords.getTicks(coords.xStt,coords.xEnd-coords.xStt,graphWd/100);for(var i=0;i="0"&&c<="9"){thisType="N";}else{if(this.operators.indexOf(c)>=0){if(c=="-"){thisType="-";}else{thisType="O";}}else{if(c=="."||c==this.Variable){thisType="N";}else{thisType="C";}} if(c=="("){thisType="(";} if(c==")"){thisType=")";}} x+=thisType;if(prevType=="("&&thisType=="-"){y+="0";} if(OpenQ){switch(thisType){case "N":break;default:y+=")";OpenQ=false;}} if(prevType=="O"&&thisType=="-"){y+="(0";OpenQ=true;} y+=c;prevType=thisType;} if(OpenQ){y+=")";OpenQ=false;} return(y);};Parser.prototype.fixImplicitMultply=function(s){var x=s+"\n";var y="";var prevType="?";var prevName="";var thisType="?";var thisName="";for(var i=0;i="0"&&c<="9"){thisType="N";}else{if(this.operators.indexOf(c)>=0){thisType="O";thisName="";}else{thisType="C";thisName+=c;} if(c=="("){thisType="(";} if(c==")"){thisType=")";}} x+=thisType;if(prevType=="N"&&thisType=="C"){y+="*";thisName="";} if(prevType=="N"&&thisType=="("){y+="*";} if(prevType==")"&&thisType=="("){y+="*";} if(thisType=="("){switch(prevName){case "i":case "pi":case "e":case "a":case this.Variable:y+="*";break;}} y+=c;prevType=thisType;prevName=thisName;} return(y);};Parser.prototype.reset=function(){this.tempNode=[];this.errMsg="";};Parser.prototype.parse=function(s){if(s==""){return new MathNode("real","0",this.radiansQ);} if(isNumeric(s)){return new MathNode("real",s,this.radiansQ);} if(s.charAt(0)=="$"){if(isNumeric(s.substr(1))){return this.tempNode[Number(s.substr(1))];}} var sLo=s.toLowerCase();if(sLo.length==1){if(sLo>="a"&&sLo<="z"){return new MathNode("var",sLo,this.radiansQ);}} switch(sLo){case "pi":return new MathNode("var",sLo,this.radiansQ);break;} var bracStt=s.lastIndexOf("(");if(bracStt>-1){var bracEnd=s.indexOf(")",bracStt);if(bracEnd<0){this.errMsg+="Missing ')'\n";return new MathNode("real","0",this.radiansQ);} var isParam=false;if(bracStt==0){isParam=false;}else{var prefix=s.substr(bracStt-1,1);isParam=this.operators.indexOf(prefix)<=-1;} if(!isParam){this.tempNode.push(this.parse(s.substr(bracStt+1,bracEnd-bracStt-1)));return this.parse(s.substr(0,bracStt)+"$"+(this.tempNode.length-1).toString()+s.substr(bracEnd+1,s.length-bracEnd-1));}else{var startM=-1;for(var u=bracStt-1;u>-1;u--){var found=this.operators.indexOf(s.substr(u,1));if(found>-1){startM=u;break;}} nnew=new MathNode("func",s.substr(startM+1,bracStt-1-startM),this.radiansQ);nnew.addchild(this.parse(s.substr(bracStt+1,bracEnd-bracStt-1)));this.tempNode.push(nnew);return this.parse(s.substr(0,startM+1)+"$"+(this.tempNode.length-1).toString()+s.substr(bracEnd+1,s.length-bracEnd-1));}} var k;var k1=s.lastIndexOf("+");var k2=s.lastIndexOf("-");if(k1>-1||k2>-1){if(k1>k2){k=k1;var nnew=new MathNode("op","add",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}else{k=k2;nnew=new MathNode("op","sub",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}} k1=s.lastIndexOf("*");k2=s.lastIndexOf("../index.html");if(k1>-1||k2>-1){if(k1>k2){k=k1;nnew=new MathNode("op","mult",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}else{k=k2;nnew=new MathNode("op","div",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}} k=s.indexOf("^");if(k>-1){nnew=new MathNode("op","pow",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;} if(isNumeric(s)){return new MathNode("real",s,this.radiansQ);}else{if(s.length==0){return new MathNode("real","0",this.radiansQ);}else{this.errMsg+="'"+s+"' is not a number.\n";return new MathNode("real","0",this.radiansQ);}}};function MathNode(typ,val,radQ){this.tREAL=0;this.tVAR=1;this.tOP=2;this.tFUNC=3;this.radiansQ=true;this.setNew(typ,val,radQ);} MathNode.prototype.setNew=function(typ,val,radQ){this.radiansQ=typeof radQ!=='undefined'?radQ:true;this.clear();switch(typ){case "real":this.typ=this.tREAL;this.r=Number(val);break;case "var":this.typ=this.tVAR;this.v=val;break;case "op":this.typ=this.tOP;this.op=val;break;case "func":this.typ=this.tFUNC;this.op=val;break;} return(this);};MathNode.prototype.clear=function(){this.r=1;this.v="";this.op="";this.child=[];this.childCount=0;};MathNode.prototype.addchild=function(n){this.child.push(n);this.childCount++;return(this.child[this.child.length-1]);};MathNode.prototype.getLevelsHigh=function(){var lvl=0;for(var i=0;i0){var parq=false;if(this.op=="add")parq=true;if(this.op=="sub")parq=true;if(prevop=="div")parq=true;if(noparq)parq=false;if(this.typ==this.tFUNC)parq=true;if(this.typ==this.tOP){}else{s+=this.fmt(true);} if(parq)s+="(";for(var i=0;i0)s+=this.fmt();s+=this.child[i].walkFmta(false,this.op);if(this.typ==this.tFUNC||(parq&&i>0)){s+=")";}}}else{s+=this.fmt();if(prevop=="sin"||prevop=="cos"||prevop=="tan"){if(this.radiansQ){s+=" rad";}else{s+="°";}}} return s;};MathNode.prototype.walkNodesFmt=function(level){var s="";for(var i=0;i2){f*=i;} return f;} function SVG(){this.lineWidth=1;this.lineClr='#000';this.lineAlpha='1';this.fillClr='#def';this.fillAlpha='0.2';this.inLineQ=false;this.inGroupQ=false;this.line=[];this.txt='';this.ftrStr="";this.txt=this.getHeader();} SVG.prototype.getHeader=function(){var s="";s+='\n';s+='\n';s+='\n';s+="SVG Output\n";return s;};SVG.prototype.lineStyle=function(thick,clr,alpha){if(thick==0)thick=0.2;this.lineWidth=thick;this.lineClr=clr;};SVG.prototype.beginFill=function(clr,alpha){fillClr=clr;};SVG.prototype.endFill=function(){};SVG.prototype.moveTo=function(x,y){if(this.line.length>1)this.polyline();this.line.push([x,y]);};SVG.prototype.lineTo=function(x,y){this.line.push([x,y]);};SVG.prototype.drawRect=function(x,y,width,height){txt+='';};SVG.prototype.drawText=function(x,y,text,rotate){txt+='';txt+=text;txt+="";};SVG.prototype.getStyle=function(){var s="";s+="opacity:1;fill:#"+fillClr.toString(16)+";fill-opacity:1;fill-rule:nonzero;";s+="stroke:#"+lineClr.toString(16)+"; stroke-width:"+lineWidth.toString()+"; stroke-linecap:butt; stroke-linejoin:miter; stroke-opacity:1; visibility:visible;";return(s);};SVG.prototype.getFontStyle=function(){var s="";s+="font-size:30px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;";s+="text-align:start; line-height:100.00000381%;";s+="opacity:1; fill:#0000ff; fill-opacity:1; fill-rule:nonzero; stroke:none;";s+="visibility:visible;display:inline;font-family:Komika Text;";return(s);};SVG.prototype.polyline=function(){var s="";s+="0)s+=", ";var pt=line[i];s+=pt.x.toPrecision(5);s+=" ";s+=pt.y.toPrecision(5);} s+="' ";s+=this.getStyle();s+=" />";s+="\n";this.txt+=s;};SVG.prototype.getStyle=function(){s='';s+="stroke-width='"+this.lineWidth+"' ";s+="stroke='"+this.lineClr+"' ";s+="fill='"+this.fillClr+"' ";s+="fill-opacity='"+this.fillAlpha+"' ";return s;};SVG.prototype.group=function(id){if(inGroupQ){txt+="\n";} txt+="";inGroupQ=true;};SVG.prototype.getText=function(){if(this.line.length>1)this.polyline();if(this.inGroupQ){this.txt+="\n";} return(this.txt+this.ftrStr);};function isNumeric(n){return!isNaN(parseFloat(n))&&isFinite(n);} CanvasRenderingContext2D.prototype.drawArrow=function(x0,y0,totLen,shaftHt,headLen,headHt,angle,sweep,invertQ){var g=this;var pts=[[0,0],[-headLen,-headHt/2],[-headLen+sweep,-shaftHt/2],[-totLen,-shaftHt/2],[-totLen,shaftHt/2],[-headLen+sweep,shaftHt/2],[-headLen,headHt/2],[0,0]];if(invertQ){pts.push([0,-headHt/2],[-totLen,-headHt/2],[-totLen,headHt/2],[0,headHt/2]);} for(var i=0;i");win.document.location="#";} function canvasPrint(){var can=document.getElementById("gfx0");var c2=document.createElement('canvas');c2.width=can.width/2;c2.height=can.height/2;g2=c2.getContext("2d");g2.drawImage(can,0,0,can.width,can.height,0,0,c2.width,c2.height);var dataUrl=c2.toDataURL('image/png');var win=window.open();win.document.write("");win.document.location="#";win.setTimeout(function(){win.focus();win.print();},500);} function dist(dx,dy){return(Math.sqrt(dx*dx+dy*dy));}