乒乓球的运动模拟
用鼠标在下面的框框中拖放:
这里的计算过程大致如下:
1. 在鼠标事件(mousedown,mousemove)使乒乓球的位置等于鼠标位置,达到乒乓球被鼠标拖动的效果。
2. 鼠标松开或碰到框边时让乒乓球“脱手”,此时计算乒乓球的初速度,为使初速度的计算更稳定,这里在 mousemove时维持了一个鼠标轨迹的数组,在“脱手”时取倒数第4个鼠标位置与当前鼠标位置的距离来计算初速度。
3. 启动循环:每0.01秒执行一次loop函数。loop函数计算这0.01秒的位移情况,然后在新位置画出乒乓球,产生动画。目前主要根据初速度、重力加速度、空气阻力、弹性恢复系数、滚动摩擦这几点考虑,没有考虑其自身的滚动。
计算时采用世界坐标,画在屏幕上时转换成屏幕坐标,世界坐标0.001米对应屏幕坐标的1个像素。
这里使用的一些数据:
乒乓球直径0.04m,重 0.0027kg,重力加速度9.8m/s,恢复系数0.92,滚动摩擦系数没有查到,这里使用的是0.8。
在运动时由于我是使用的0.01秒为一个计算单位,于是在触碰到框边时遇到一个问题,即根据时间0.01秒的计算,运动超过了框边,该如何处理?
后来我是这么解决的:当发现根据时间0.01秒计算其运动超过了框边时,则抛弃根据时间计算出的结果,而先根据当前位置到框边的距离计算运动时间,将这0.01秒分成两个时间段计算:到达框边的时间和剩下的时间。
由于一些公式都是在网上查出,自己对这些并不是太有信心。望发现错误者指出,谢谢!
另,本来准备在触碰到框边的时候产生“砰”的声音,声音都录好了,但使用html5的Audio时发现很不好用:没有stop方法,于是只能设置src=""来停止再设置回去,不知是不是这个原因,声音明显延迟(不这样好像也是延迟的)。而我又不想使用flash,不知哪位有没有办法通过纯html/js实现较好的实时声音播放。
可直接查看网页源文件获取js源代码。
转载需注明出处:http://cnblogs.com/zhucai/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述