starwing 发表于 2007-1-1 19:14:35

SF!为什么下不了东东啊?下载框在进度条满后就自动消失了……难道是新装的VIsta发疯?有人遇到我一样的情况吗?
另:易码的资源好像没法用迅雷下载啊~

Anson 发表于 2007-1-24 02:45:12

发现才一个回复=。=顶一下~~~

JAY 发表于 2007-1-1 17:56:31

碰撞演示《弹球》

代码很乱,只把程序放上来了,有空把代码整理了之后在放上来吧。
程序下载: (手头没有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]
查看完整版本: 碰撞演示《弹球》