乒乓球的运动模拟

用鼠标在下面的框框中拖放:

这里的计算过程大致如下:
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源代码。

posted @ 2010-08-02 00:00  朱才  阅读(3645)  评论(11编辑  收藏  举报