另:易码的资源好像没法用迅雷下载啊~ 发现才一个回复=。=顶一下~~~
碰撞演示《弹球》
代码很乱,只把程序放上来了,有空把代码整理了之后在放上来吧。程序下载: (手头没有VS6,用VS7编译的,可能有的朋友没有VC7运行库,不能运行)
按鼠标右键可以重新演示
碰撞判定算法:
以地面碰撞为例,如果当前物体高度为h,速度为v竖直向下。
将时间单位化,v考虑为当前时间片的平均速度,那么下一时刻物体的位置为h+v,物体将会处于地面之下。
当上述条件成立的时候,如果是完全弹性碰撞的情况,物体将反弹回去,并且在到达同样的高度h的时候速度也为v,不过竖直向上。所以此时只需要将速度反向。
伪代码:
if (obj.NextPos is under ground)
{
obj.v = -obj.v;
}
如果要考虑能量损失的情况,可以在obj.v上面乘上一个纯小数,例如:
obj.v = -obj.v * 0.8;
不过这样有个潜在的问题,就是有可能下一次反弹的最大高度达不到当前的高度,也就不能用这样的方法了。
另外如果就这样做的话,物体会不停的弹下去,所以需要考虑物体停止运动的条件。
我的想法是,如果物体离地面的距离h'很小,当前的速度v''也很小,那么可以考虑停止物体的运行。
伪代码:
if (obj.Pos < EPSILON && obj.v < EPSILON)
{
obj.stop();
}
页:
[1]