JavaScript模拟实现自由落体效果
本文的例子分享了js实现自由落体效果的具体代码,供大家参考。具体内容如下
1.翻译
2.实施分析
用画布画球和地面;
1.下降过程
复习物理知识,物体的下落过程(不包括损耗)是由引力势能转化为动能
重力势能Ep=mgh
动能ek=(1/2) mv 2
速度从0增加到gt
这里需要计算每次浏览器渲染的球的Y坐标
y=(1/2)gt^2
2.反弹过程
动能转化为重力势能
速度逐渐降低,直到达到零
计划设置Y=(1/2) g (t-t1) 2,其中t1为下落或反弹所花费的时间
然而,实际效果并不令人满意。应该是回弹位移的计算有误,反复思考也没有结果(如果有更好的实现方式,请评论告知)
所以决定先把下落过程的位移保存在数组中,等它反弹回来的时候再一个一个取出赋值
3.代码实现
!DOCTYPE html html lang=' en ' head meta charset=' UTF-8 ' title title/title style body { padd : 0;margin : 0;背景-color: rgba(0,0,0,1);} # canvas { display:块;margin: 10px自动;}/style/头条canvas id=' canvas ' width=' 600 ' height=' 600 '您的浏览器不支持canvas/canvas脚本类型=' text/JavaScript '//自由落体h=(gt 2)/2动能ek=(mv 2)/2重力势能:Ep=mgh let x=300,y=60,//中心坐标minHeight=60,//最小下落位移maxHeight=446,//最大下落位移dir=true//dir true falls,false是bounce(function(){ let canvas=document . getelementbyid(' canvas ');let CTX=canvas . getcontext(' 2d ');draw(CTX);})();函数draw(ctx){让currentTime=new Date()。getTime();//开始毫秒,返回并记录一次。current time let arr _ y=[];//设置数组窗口。requestanimation frame(函数init(){ if(dir){ if(y=max height){ dir=false;当前时间=新日期()。getTime();}else{ y=y Math.pow((新日期()。getTime() - currentTime)/1000,2)* 10/2;arr _ y . push(y);} } else { if(y=minHigh){ dir=true;当前时间=新日期()。getTime();}else{ y=arr_y.splice(-1,1)[0]| | 60;} } drawArc(ctx,x,y);requestAnimationFrame(init);});}//draw函数drawarc (CTX,x,y) {CTX。球体和地面上的clearrect (0,0,600,600);CTX . BeginPath();ctx.arc(x,y,50,0,Math。PI * 2);CTX . FillStyle=' # 98 ADF 0 ';CTX . fill();CTX . save();CTX . BeginPath();ctx.strokeStyle=' # ffffffctx.moveTo(0,500);ctx.lineTo(600,500);CTX . LineWidth=4;CTX . stroke();CTX . closepath();CTX . save();}/脚本/正文/html4。结论
虽然只是一个简单的下落和弹跳,但是我用了6天的时间才实现了弹跳位移(主要是每天想着怎么计算弹跳位移)
主要的出发点集中在
下落位移(开口线上的抛物线方程)
y=(1/2)gt^2
对回弹位移的思考应改为将抛物线沿X轴向右移动t1,并得出结论
y=(1/2)g(t-t1)^2
感兴趣的同学可以试试看效果
浏览器渲染反弹的效果不尽如人意,所以还没有想出位移的计算方法,所以用数组来实现
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:JavaScript模拟实现自由落体效果是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。