var w,h,ratio,i,s,el,g,div,dragQ,game,my={};function gravityMain(wd,ht){this.version='0.31';w=typeof wd!=='undefined'?wd:'500';h=typeof ht!=='undefined'?ht:'500';w=Math.min(w,window.innerWidth-30);var s="";s+='
';s+='';s+='';s+='
';s+='
0
';s+='
';s+='
';s+='mass = ';s+='';s+=' × 10 ';s+='';s+=' kg';s+='
';s+='
';s+='
';s+='
Maze Completed
';s+='';s+='
';s+='';s+='';s+='';s+='';s+='
© 2016 MathsIsFun.com v'+this.version+'
';s+='
';document.write(s);el=document.getElementById('canvas1');ratio=2;el.width=w*ratio;el.height=h*ratio;el.style.width=w+"px";el.style.height=h+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);el2=document.getElementById('canvas2');ratio=2;el2.width=w*ratio;el2.height=h*ratio;el2.style.width=w+"px";el2.style.height=h+"px";g2=el2.getContext("2d");g2.setTransform(ratio,0,0,ratio,0,0);my.clrs=[["Blue",'#0000FF'],["Red",'#FF0000'],["Black",'#000000'],["Green",'#00cc00'],["Orange",'#FFA500'],["Slate Blue",'#6A5ACD'],["Lime",'#00FF00'],["Spring Green",'#00FF7F'],["Teal",'#008080'],["Gold",'#ffd700'],["Med Purple",'#aa00aa'],["Light Blue",'#ADD8E6'],["Navy",'#000080'],["Purple",'#800080'],["Dark SeaGreen",'#8FBC8F']];my.draggingQ=false;el2.addEventListener('touchstart',ontouchstart,false);el2.addEventListener('touchmove',ontouchmove,false);el2.addEventListener('touchend',ontouchend,false);el2.addEventListener("mousedown",onMouseDown,false);el2.addEventListener("mousemove",onMouseMove,false);el2.addEventListener("mouseup",onMouseUp,false);timeIncr=24*3600;univTime=0;gFact=6.673e-11;extents=[0,0,1e10,1e10];newExtents=[0,0,1e10,1e10];things=[];props=[['m','mass','kg'],['xp','x','m'],['yp','y','m'],['vx','x vel','m/s'],['vy','y vel','m/s']];lastPosn=[];clrNum=0;m=1e24;my.examples=[{name:'b',things:[[3.00e+23,9.02e+9,-5.17e+8,246,-96.3],[3.00e+23,7.65e+9,-1.10e+9,142,62.7],[1.00e+23,8.46e+9,-1.80e+8,325,-9.77]]},{name:'c',things:[[4.00e+23,2.86e+10,-1.73e+9,284,-52.0],[3.00e+23,2.78e+10,-2.80e+9,118,32.5]]},{name:'Planets',things:[[2e30,0,0,0,0,'#FFFF00'],[3.3e23,0,5.8e10,4.7e4,0,'#AAAAAA'],[4.9e24,0,1.1e11,3.5e4,0,'#CCCCFF'],[6e24,0,1.5e11,3e4,0,'#0000FF'],[6.4e23,0,2.3e11,2.4e4,0,'#FF8888']]},{name:'Earth and Moon',things:[[6e24,0,0,0,0,'#0000ff'],[7.3e22,0,3.8e8,1e3,0,'#FF0000']]},{name:'a',things:[[4.00e+23,1.73e+9,-2.39e+9,148,-129],[1.00e+23,1.59e+9,-2.46e+9,-382,174]]},];my.exampleNo=0;gameNew();animate();} function exampleNext(){my.exampleNo=loop(my.exampleNo,0,my.examples.length-1,1);var thingsInit=my.examples[my.exampleNo].things;things=[];for(var i=0;i5) newThing.clr=thingsInit[i][5];things.push(newThing);} console.log("exampleNext",things,my.playQ);if(!my.playQ)playFlip();} function ontouchstart(evt){var touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;onMouseDown(evt)} function ontouchmove(evt){var touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;onMouseMove(evt)} function ontouchend(){my.draggingQ=false;} function onMouseDown(evt){var bRect=el.getBoundingClientRect();mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);playDo(false);lastPosn[0]=mouseX;lastPosn[1]=mouseY;my.draggingQ=true;if(evt.preventDefault){evt.preventDefault();} return false;} function onMouseMove(evt){var bRect=el.getBoundingClientRect();mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);if(my.draggingQ){g2.clearRect(0,0,el2.width,el2.height);g2.lineWidth=2;g2.strokeStyle='blue';g2.beginPath();g2.moveTo(lastPosn[0],lastPosn[1]);g2.lineTo(mouseX,mouseY);g2.stroke();} if(evt.preventDefault){evt.preventDefault();} return false;} function onMouseUp(evt){var bRect=el.getBoundingClientRect();mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);my.draggingQ=false;g2.clearRect(0,0,el2.width,el2.height);var xm=mouseX;var ym=mouseY;var mval=document.getElementById('massval').value;var mexp=document.getElementById('massexp').value;var mass=mval*Math.pow(10,mexp);console.log("onMouseUp",mval,mexp,mass);clrNum=(++clrNum)%my.clrs.length;var newThing=new Thing(clrNum);newThing.setXFromPixel(lastPosn[0],extents);newThing.setYFromPixel(lastPosn[1],extents);newThing.vx=(extents[2]-extents[0])*(xm-lastPosn[0])/w/2e6;newThing.vy=(extents[3]-extents[1])*(ym-lastPosn[1])/w/2e6;newThing.m=mass;things.push(newThing);playDo(true);} function getPopHTML(){var s='';s+='
';for(var j=0;j'+p[1]+'';} s+='
';var str='';for(var i=0;i';if(i>0)str+=',';str+='[';for(var j=0;j0)str+=',';str+=t[p[0]].toPrecision(3);s+='';} str+=']';s+='';} var wd=400;s+='
';s+='';s+='
';s+='
';s+='';s+='
';return s;} function optpop(){console.log("optpop");my.playQ=false;var pop=document.getElementById('optpop');pop.innerHTML=getPopHTML();pop.style.transitionDuration="0.3s";pop.style.opacity=1;pop.style.zIndex=12;pop.style.left=(w-460)/2+'px';} function optYes(){var pop=document.getElementById('optpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-999px';for(var i=0;i600){things[i].trails.shift();} things[i].plotTrail(newExtents);} univTime+=timeIncr;var xRange=extents[2]-extents[0];var yRange=extents[3]-extents[1];var uRange=Math.max(xRange*h/w,yRange)*1.05;uRange=Math.max(uRange,1e10);var newxRange=newExtents[2]-newExtents[0];var newyRange=newExtents[3]-newExtents[1];var newuRange=Math.max(newxRange*h/w,newyRange)*1.1;newuRange=Math.max(newuRange,1e10);uRange=uRange*0.1+newuRange*0.9;document.getElementById('score').innerHTML=uRange.toPrecision(4);extents[0]=(newExtents[2]+newExtents[0])/2-w/h*uRange/2;extents[2]=(newExtents[2]+newExtents[0])/2+w/h*uRange/2;extents[1]=(newExtents[3]+newExtents[1])/2-uRange/2;extents[3]=(newExtents[3]+newExtents[1])/2+uRange/2;} function Thing(clrNum){this.xp=0;this.yp=0;this.vx=0;this.vy=0;this.m=0;this.trails=[];this.clr=my.clrs[clrNum][1];} Thing.prototype.plotTrail=function(newExtents){var len=this.trails.length;g.strokeStyle=hex2rgba(this.clr,0.2);for(var j=0;jnewExtents[2])newExtents[2]=xPlot;if(yPlot>newExtents[3])newExtents[3]=yPlot;} g.stroke();g.lineWidth=2;g.moveTo(this.scaleToX(xPlot),this.scaleToY(yPlot));g.beginPath();g.fillStyle=hex2rgba(this.clr,0.2);g.arc(this.scaleToX(xPlot),this.scaleToY(yPlot),3*w*this.getRadius()/((extents[2]-extents[0])),0,2*Math.PI);g.fill();g.moveTo(this.scaleToX(xPlot),this.scaleToY(yPlot));g.beginPath();g.fillStyle=hex2rgba(this.clr,0.8);g.arc(this.scaleToX(xPlot),this.scaleToY(yPlot),1*w*this.getRadius()/((extents[2]-extents[0])),0,2*Math.PI);g.fill();g.fillText(parseInt(Math.sqrt(this.vx*this.vx+this.vy*this.vy)).toString(),this.scaleToX(xPlot),this.scaleToY(yPlot));};Thing.prototype.scaleToX=function(rawPos){return(w*(rawPos-extents[0])/(extents[2]-extents[0]));};Thing.prototype.scaleToY=function(rawPos){return(h*(rawPos-extents[1])/(extents[3]-extents[1]));};Thing.prototype.setXFromPixel=function(Pixel,extents){this.xp=Pixel*(extents[2]-extents[0])/w+extents[0];};Thing.prototype.setYFromPixel=function(Pixel,extents){this.yp=Pixel*(extents[3]-extents[1])/h+extents[1];};Thing.prototype.getRadius=function(){return(Math.pow(this.m,0.33));};function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min;} function hex2rgba(hex,opacity){hex=hex.replace('#','');var r=parseInt(hex.substring(0,2),16);var g=parseInt(hex.substring(2,4),16);var b=parseInt(hex.substring(4,6),16);result='rgba('+r+','+g+','+b+','+opacity+')';return result;} function loop(currNo,minNo,maxNo,incr){if(incr===undefined)incr=1;currNo+=incr;var range=maxNo-minNo+1;if(currNomaxNo){currNo=minNo+(currNo-minNo)%range;} return currNo;}