var w,h,ratio,el,g,g2,my={};let mouse={x:0,y:0,isDown:false};let pend={mass:10,length:2.5,ang:(Math.PI/2)-0.7,vel:0,accel:0,momInt:0};function pendulumMain(){let version='0.62';w=420;h=450;my.stt={x:w/2,y:70}
my.g=9.8
my.scale=100
my.sttTime=performance.now()
my.times=[]
my.prevTime=0
my.prevx=0
my.dir=0
let s='';s+=''
s+='
';s+='
';s+='
';s+='
'
s+='Restart ';s+='
'
s+='
'
s+=playHTML(36)
s+='
'
s+='
';let infos=[{id:'pe',name:'PE:',val:1,style:0},{id:'ke',name:'KE:',val:1,style:0},{id:'tote',name:'Total:',val:1,style:0},{id:'period',name:'Period ≈ ',val:0,style:1},];infos.map(info=>{s+='
'
s+='
'+info.name+'
'
if(info.style==0)s+='
'+info.val+'
';if(info.style==1)s+='
'+info.val+'
';s+='
'})
s+='
'
let sliders=[{id:'len1',name:'Length',fn:onLen1Chg,val:pend.length,min:0.1,max:4.0,step:0.01},{id:'mass1',name:'Mass',fn:onMass1Chg,val:pend.mass,min:1,max:40,step:0.1},{id:'grav',name:'Gravity',fn:onGravChg,val:my.g,min:0,max:10,step:0.1},];sliders.map(slider=>{s+='
'+slider.name+':
'
s+='
';s+='
'+slider.val+'
';s+='
';})
s+='
';s+='
© 2020 MathsIsFun.com v'+version+'
';s+='
';document.write(s);el=document.getElementById('canvas1');ratio=3;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);let el2=document.getElementById('canvas2');ratio=3;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);restart()
my.playQ=false
playToggle()}
function restart(){g2.clearRect(0,0,g2.canvas.width,g2.canvas.height)
my.sttTime=performance.now()
my.prevTime=my.sttTime
pend.vel=0
pend.accel=0
pend.ang=(Math.PI/2)-0.7
if(!my.playQ)playToggle()
calcDo()
draw()}
function onLen1Chg(v){pend.length=Number(v);document.getElementById('len1').innerHTML=v;console.log('onLen1Chg',v)
draw()}
function onMass1Chg(v){pend.mass=Number(v);document.getElementById('mass1').innerHTML=v;draw()}
function onGravChg(v){my.g=Number(v);document.getElementById('grav').innerHTML=v;}
function calcDo(){let now=performance.now()
let elapsed=(now-my.sttTime)/1000
if(elapsed>1)elapsed=0.01
my.sttTime=now
pend.momInt=pend.mass*pend.length*pend.length;pend.ang+=pend.vel*elapsed+(0.5*pend.accel*elapsed*elapsed);let torque=pend.mass*my.g*Math.cos(pend.ang)*pend.length;let accel=torque/pend.momInt;pend.vel+=0.5*(accel+pend.accel)*elapsed;pend.accel=accel;let h=pend.length*(1-Math.cos(pend.ang-Math.PI/2))
let pe=pend.mass*my.g*h
let ke=0.5*pend.momInt*pend.vel*pend.vel
pe=Math.round(pe)
ke=Math.round(ke)
document.getElementById('ke').innerHTML=ke
document.getElementById('pe').innerHTML=pe
document.getElementById('tote').innerHTML=ke+pe}
function draw(){if(!mouse.isDown){let x1=pend.length*my.scale*Math.sin(pend.ang-Math.PI/2);let y1=pend.length*my.scale*Math.cos(pend.ang-Math.PI/2);let dirn=(y1