var w,h,ratio,s,el,g,coords,graph,my={};function matrixtransformMain(){my.version='0.81';w=360;h=460;var canvasWd=340;var canvasHt=340;coords=new Coords(0,0,canvasWd,canvasHt,0,0,5,5,true);s="";s+='' s+='
';s+='
';s+='
';s+='
';s+='Transformation Matrix:';s+='
';s+='';s+='
';s+='
';my.elems=[{id:'in11',name:'a',x:12,y:60,stt:1.5},{id:'in12',name:'b',x:170,y:60,stt:0},{id:'in21',name:'c',x:12,y:130,stt:0},{id:'in22',name:'d',x:170,y:130,stt:1.5},] for(var i=0;i${elem.name}:
`} s+='
';s+=` ` s+='
';s+='
';var grid=[] for(var i=0;i<=5;i++){var x=-5+i*2 grid.push({x:x,y:-5,}) grid.push({x:x,y:5,}) grid.push({x:x+1,y:5,}) grid.push({x:x+1,y:-5,})} console.log('grid',grid) my.shapes=[{name:'F',pts:[{x:3,y:4},{x:3,y:5},{x:0,y:5},{x:0,y:0},{x:1,y:0},{x:1,y:1.8},{x:2.5,y:1.8},{x:2.5,y:2.8},{x:1,y:2.8},{x:1,y:4}]},{name:'Bars',pts:grid},{name:'Arrow',pts:[{x:0,y:0},{x:2,y:4},{x:4,y:0},{x:2,y:2}]},];var shapeList=[] for(var i=0;i' s+='
Transform 100%
' s+=`` s+='
';s+='';s+='';s+='
© 2019 MathsIsFun.com v'+my.version+'
';s+='';document.write(s);el=document.getElementById('canvasId');ratio=4;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);console.log('',el,g) my.examples=[[1,0.8,0,1],[-1,0,0,1],[0,1,1,0],[2,0,0,2],[0.8,0,0,0.8],[0.866,-0.5,0.5,0.866],[1,1,-1,0],[-6,3,4,5],[2,3,-1,1],[2,-4,-5,1]];my.exampleNo=0;my.lowPrimes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039];my.MAX=9007199254740991;my.LowPrimeN=100;my.a=1 exampleDo()} function chgShape(n){console.log('chgShape',n) my.shapeNo=n update()} function onValChg(n){var elem=my.elems[n] elem.stt=document.getElementById(elem.id).value update()} function onAChg(v){console.log('onAChg',v) my.a=v document.getElementById('aLbl').innerHTML="Transform "+parseInt(v*100)+"%" update()} function onSliderChg(type,n,v){console.log('onSliderChg',type,n,v) v=Number(v);var elem=my.elems[n] var sttVal=Number(elem.stt) var newVal=(sttVal==0)?v:sttVal*(1+v) newVal=fmtNum(newVal) document.getElementById(elem.id).value=newVal if(type==1){elem.stt=newval} update();} function exampleDo(){my.example=my.examples[my.exampleNo];my.exampleNo++;if(my.exampleNo>my.examples.length-1)my.exampleNo=0;for(var i=0;i"+q.ans2;if(q.notes.length>0)roots+="
"+q.notes;var factStr="";if(q.count>0){factStr+="f(x) = ";if(a!=1)factStr+=a;factStr+=fmtFactor(q.ans1);if(q.count==1){factStr+="2";}else{factStr+=fmtFactor(q.ans2);}} var s="";s+='Characteristic Equation: ' s+=q.formula;if(q.notes.length>0)s+="
"+q.notes;s+="
";switch(q.count){case 1:s+="
Root: "+q.ans1;s+="
Factored: "+factStr;s+="
";s+="
Discriminant: "+fmt(q.disc);s+="
Vertex: ("+fmt(q.vertX)+", "+fmt(q.vertY)+")";s+="
Sum of Roots (-b/a): "+fmt(-b/a);s+="
Product of Roots (c/a): "+fmt(c/a);break;case 2:s+="
Roots: "+q.ans1+", "+q.ans2;if(q.pair.length>0)s+="
Root Pair: "+q.pair;s+="
Factored: "+factStr;s+="
";s+="
Discriminant: "+fmt(q.disc);s+="
Vertex: ("+fmt(q.vertX)+", "+fmt(q.vertY)+")";s+="
Sum of Roots (-b/a): "+fmt(-b/a);s+="
Product of Roots (c/a): "+fmt(c/a);break;} document.getElementById("longans").innerHTML=s;} function drawShape(g,pts){g.beginPath() for(var i=0;iMath.abs(c)){root2=c/(a*root1);} ans1=fmt(root1);ans2=fmt(root2);ansCount=2;} vertX=-b/(2*a);vertY=Number(a*vertX*vertX)+Number(b*vertX)+Number(c);} var formula="";formula=neatAdd(formula,a,"x2");formula=neatAdd(formula,b,"x");formula=neatAdd(formula,c,"");formula+=" = 0";var pair=rootPair(a,b,c);return{count:ansCount,formula:formula,pair:pair,ans1:ans1,ans2:ans2,disc:disc,vertX:vertX,vertY:vertY,notes:notes};} function rootPair(a,b,c){var disc=0;var pair='';if(a==0){}else{disc=b*b-4*a*c;if(disc<0){var real=-b/(2*a);var imag=Math.sqrt(-disc)/(2*a);if(real==0){}else{pair+=fmt(real);} var discabs=Math.abs(disc);var den=2*a;if(discabs===parseInt(discabs,10)){var frac=sqrtSimplify(discabs,den);pair+=" ± ";if(frac.num!=1)pair+=fmt(frac.num);if(frac.sqrt!=1)pair+='√('+fmt(frac.sqrt)+')';if(frac.den!=1)pair+='/'+fmt(Math.abs(frac.den));pair+="i";}else{pair+=" ± "+fmt(Math.abs(imag))+"i";}}else if(disc==0){pair='';}else{var numb=-b;var den=2*a;if(numb==0){}else{if(isInt(numb)&&isInt(den)){var gcf=gcfEuclid(numb,den);numb/=gcf;den/=gcf;if(den<0){numb=-numb;den=-den;} pair='';if(den==1){pair+=fmt(numb);}else{pair+=fmt(numb)+'/'+fmt(den);}}else{pair+=fmt(-b/(2*a));}} pair+=" ± ";var sqrt=Math.sqrt(disc);var den=2*a;if(sqrt===parseInt(sqrt,10)){var gcf=gcfEuclid(sqrt,den);sqrt/=gcf;den/=gcf;if(den<0){sqrt=-sqrt;den=-den;} if(den==1){pair+=fmt(sqrt);}else{pair+=fmt(Math.abs(sqrt))+'/'+fmt(Math.abs(den));}}else{if(disc===parseInt(disc,10)){var frac=sqrtSimplify(disc,den);if(frac.num!=1)pair+=fmt(frac.num);if(frac.sqrt!=1)pair+='√('+fmt(frac.sqrt)+')';if(frac.den!=1)pair+='/'+fmt(Math.abs(frac.den));}else{pair+=fmt(sqrt/den);}}}} return pair;} function isInt(x){if(x===parseInt(x,10))return true;return false;} function sqrtSimplify(sqrt,den){var num=1;var primes=getFactors(sqrt);for(var i=0;i1){num*=prime.val;prime.n-=2;sqrt/=(prime.val*prime.val);}} if(den>1){var gcf=gcfEuclid(num,den);num/=gcf;den/=gcf;} return{num:num,sqrt:sqrt,den:den}} function getFactors(TheNum){my.FArr=[];if(TheNum>my.MAX){return my.FArr;} my.numLeft=TheNum;if(my.numLeft==0||my.numLeft==1){return my.FArr;}else{var doneQ=false;for(var p=0;pfact;} function addFact(fact,power){my.FArr.push({val:fact,n:power});} function gcfEuclid(n,m){if(isNaN(n))return;if(isNaN(m))return;if(n==0)return;if(m==0)return;if(n0){plus=" + ";} var minus=" - ";if(x==1){if(varname.length==0){s=s+plus+"1";}else{s=s+plus+varname;}}else if(x==-1){if(varname.length==0){s=s+minus+"1";}else{s=s+minus+varname;}}else if(x==0){}else if(x>0){s=s+plus+x+varname;}else{s=s+minus+Math.abs(x)+varname;} return s;} function Pt(x,y){this.x=x;this.y=y;} class Coords{constructor(left,top,width,height,xStt,yStt,xEnd,yEnd,uniScaleQ){this.left=left;this.top=top;this.width=width;this.height=height;this.xStt=xStt;this.yStt=yStt;this.xEnd=xEnd;this.yEnd=yEnd;this.uniScaleQ=uniScaleQ;this.xLogQ=false;this.yLogQ=false;this.calcScale();} calcScale(){if(this.xLogQ){if(this.xStt<=0)this.xStt=1;if(this.xEnd<=0)this.xEnd=1;} if(this.yLogQ){if(this.yStt<=0)this.yStt=1;if(this.yEnd<=0)this.yEnd=1;} var temp;if(this.xStt>this.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;}} scale(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();} drag(xPix,yPix){this.xStt+=xPix*this.xScale;this.xEnd+=xPix*this.xScale;this.yStt+=yPix*this.yScale;this.yEnd+=yPix*this.yScale;this.calcScale();} newCenter(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();} fitToPts(pts,borderFactor,addQ=false){console.log("fitToPts",pts);for(var i=0;i=5){if(majorQ){return(5*pow10);}else{return(2*pow10);}} if(mantissa>=2){if(majorQ){return(2*pow10);}else{return(1*pow10);}} if(mantissa>=1){if(majorQ){return(1*pow10);}else{return(0.2*pow10);}} if(majorQ){return(1*pow10);}else{return(0.2*pow10);}}} class Graph{constructor(g,coords){this.g=g;this.coords=coords;this.xLinesQ=true;this.yLinesQ=true;this.xValsQ=true;this.yValsQ=true;this.skewQ=false;} drawGraph(){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();}}} drawVtLines(){var g=this.g;g.lineWidth=1;var ticks=coords.getTicks(coords.xStt,coords.xEnd-coords.xStt);for(var i=0;i0&&s.indexOf('e')<0){s=s.replace(/0+$/,'');} if(s.charAt(s.length-1)=='.'){s=s.substr(0,s.length-1);} return s;} function radioHTML(prompt,id,lbls,func){var s='';s+='
';s+=prompt;for(var i=0;i';s+='';} s+='
';return s;}