my

<script>
let language=2;let checkA;let chalkA;let checkB;let chalkB;let checkS;let chalkS;let checkG;let chalkG;let checkT;let chalkT;let checkC;let chalkC;let checkP;let chalkP;let backImg;let centerX=1;let centerY=0.4;let objX=1.8;let objY=1.0;let timming=0;let phase=0;let oscH;let oscR;let oscL;let oscT;let oscW;function preload(){var url=getURL();var regexp=”http”;var m=match(url,regexp);var imagePrefix=(m==”http”)?”/lee/image/”:””;backImg=loadImage(imagePrefix+”conical_pendulum_back.png”)}function setup(){frameRate(30);pixelDensity(2*displayDensity());let o=select(“#myContainer”);let a=1;let w=int(min(o.width,(window.innerHeight-120)/a));let h=int(w*a);myCanvas=createCanvas(w,h);myCanvas.parent(“myContainer”);myCanvas.id(“myP5Canvas”);checkA=select(“#checkA”);chalkA=select(“#chalkA”);if(language==0)chalkA.html(“실행”);if(language==1)chalkA.html(“実行”);if(language==2)chalkA.html(“Run”);checkA.checked(true);checkB=select(“#checkB”);chalkB=select(“#chalkB”);if(language==0)chalkB.html(“천천히(x10)”);if(language==1)chalkB.html(“ゆっくり(x10)”);if(language==2)chalkB.html(“Slow(x10)”);checkS=select(“#checkS”);chalkS=select(“#chalkS”);if(language==0)chalkS.html(“길이 표시”);if(language==1)chalkS.html(“長さ表示”);if(language==2)chalkS.html(“Length”);checkG=select(“#checkG”);chalkG=select(“#chalkG”);if(language==0)chalkG.html(“중력”);if(language==1)chalkG.html(“重力”);if(language==2)chalkG.html(“Gravity”);checkT=select(“#checkT”);chalkT=select(“#chalkT”);if(language==0)chalkT.html(“장력”);if(language==1)chalkT.html(“張力”);if(language==2)chalkT.html(“Tension”);checkC=select(“#checkC”);chalkC=select(“#chalkC”);if(language==0)chalkC.html(“구심력”);if(language==1)chalkC.html(“求心力”);if(language==2)chalkC.html(“Centripetal force”);checkP=select(“#checkP”);chalkP=select(“#chalkP”);if(language==0)chalkP.html(“주기”);if(language==1)chalkP.html(“周期”);if(language==2)chalkP.html(“Period”);setup2()}function windowResized(){let o=select(“#myContainer”);let a=1;let w=int(min(o.width,(window.innerHeight-120)/a));let h=int(w*a);resizeCanvas(w,h)}function setup2(){oscH=(objY-centerY);oscR=(objX-centerX);oscL=mag(oscR,oscH);oscT=TWO_PI*sqrt(oscH/9.8);oscW=sqrt(9.8/oscH)}function doButtonRst(){}function doButtonRun(){}function doRadioA(){}function draw(){if(touches.length>1)return;background(244);strokeWeight(0.005);textSize(0.08);textAlign(LEFT,TOP);push();scale(width/2);if(checkA.checked()){timming++;if(checkB.checked()){phase+=TWO_PI*0.1/(30*oscT)}else{phase+=TWO_PI*1.0/(30*oscT)}}let ox=centerX+oscR*cos(phase);let oy=centerY+oscH;let theta=atan2(oscR,oscH);fill(255);noStroke();rect(2,0,2,2);stroke(128);for(let i=0;i<24;i+=2){let x1=objX+0.05*cos(map(i,0,24,0,TWO_PI));let y1=objY+0.05*sin(map(i,0,24,0,TWO_PI));let x2=objX+0.05*cos(map(i+0.7,0,24,0,TWO_PI));let y2=objY+0.05*sin(map(i+0.7,0,24,0,TWO_PI));line(x1,y1,x2,y2)}ellipse(ox,oy,0.1,0.1);if(sin(phase)<0)image(backImg,0,0,2,2);stroke(0);line(centerX,centerY,ox,oy);fill(0);noStroke();ellipse(ox,oy,0.1,0.1);if(sin(phase)>=0)image(backImg,0,0,2,2);stroke(128,64,0);line(objX,objY,centerX,centerY);fill(64);stroke(255);push();translate((centerX+objX)/2,(centerY+objY)/2);rotate(atan2(objY-centerY,objX-centerX));textAlign(CENTER,BOTTOM);text(round(oscL*100)/100+” m”,0,-0.01);pop();if(checkS.checked()){fill(255,128);stroke(128,64,0);beginShape();vertex(objX,objY);vertex(centerX,centerY);vertex(centerX,centerY+oscH);endShape(CLOSE);fill(64);stroke(255);textAlign(CENTER,TOP);text(abs(round(oscR*100)/100)+” m”,centerX+oscR/3,centerY+oscH+0.01);textAlign(RIGHT,CENTER);text(abs(round(oscH*100)/100)+” m”,centerX-0.01,centerY+oscH/2)}fill(255,255,160,128);stroke(128);if(abs(theta)>0.01)arc1(centerX,centerY,0.3,0.3,HALF_PI-theta,HALF_PI);fill(64);stroke(255);textAlign(CENTER,CENTER);text(abs(round(degrees(theta)))+”˚”,centerX+0.17*sin(theta/2),centerY+0.17*cos(theta/2));fill(64);stroke(255);textAlign(CENTER,CENTER);if(checkP.checked()){if(language==0)text(“주기 = 2π√(“+round(oscH*100)/100+”/g) ≒ “+round(oscT*100)/100+” 초”,centerX,centerY/2);if(language==1)text(“周期 = 2π√(“+round(oscH*100)/100+”/g) ≒ “+round(oscT*100)/100+” 秒”,centerX,centerY/2);if(language==2)text(“Period = 2π√(“+round(oscH*100)/100+”/g) ≒ “+round(oscT*100)/100+” sec”,centerX,centerY/2)}textAlign(CENTER,TOP);let mg=1;let forceGX=0;let forceGY=0.11*mg;if(checkG.checked()){fill(255,0,0);drawArrow2D_thick(objX,objY,forceGX,forceGY,0.012);fill(255,0,0);text(“mg”,objX,objY+forceGY)}textAlign(RIGHT,CENTER);let forceT=mg/(oscH/oscL);let forceTX=-0.1*mg*oscR/oscH;let forceTY=-0.1*mg;if(checkT.checked()){fill(0,191,0);drawArrow2D_thick(objX,objY,forceTX,forceTY,0.012);let t=atan2(forceTY,forceTX);text(round(abs(forceT*100))/100+”mg”,objX+forceTX+0.03*cos(t),objY+forceTY+0.03*sin(t))}let forceC=mg*oscR/oscH;let forceCX=-0.1*mg*oscR/oscH;let forceCY=0;if(checkC.checked()){fill(0,0,255);drawArrow2D_thick(objX,objY,forceCX,forceCY,0.012);let t=atan2(forceTY,forceTX);text(round(abs(forceC*100))/100+”mg”,objX+forceCX+0.03*cos(t),objY+forceCY+0.03*sin(t))}pop();drawButtonDrag()}function arc1(a,b,c,d,t1,t2){let t=0;if(t1<t2){if((t2-t1)<PI){arc2(a,b,c,d,t1,t2);t=t2-t1}else{arc2(a,b,c,d,t2,t1);t=t1+TWO_PI-t2}}if(t1>t2){if((t1-t2)<PI){arc2(a,b,c,d,t2,t1);t=t1-t2}else{arc2(a,b,c,d,t1,t2);t=t2+TWO_PI-t1}}return t}function arc2(a,b,c,d,start,stop){if(start<stop){arc(a,b,c,d,start,stop)}else{arc(a,b,c,d,start,TWO_PI);arc(a,b,c,d,0,stop)}}let dragged=false;let offsetX;let offsetY;function touchStarted(){if(!contain(mouseX,mouseY,0,0,width,height))return;if(touches.length>1)return;dragged=true;offsetX=mouseX*2/width-objX;offsetY=mouseY*2/width-objY}function touchMoved(){if(touches.length>1)return;if(dragged){objX=mouseX*2/width-offsetX;objY=mouseY*2/width-offsetY;objX=constrain(objX,1.3,1.94);objY=constrain(objY,centerY+0.02,1);setup2();return false}}function touchEnded(){dragged=false}
</script>