javascript - Javascript 中的碰撞处理——粒子卡住

标签 javascript collision-detection physics collision momentum

我正在尝试重新创建 this ,我已经相当成功了。不过,我在处理碰撞时遇到了问题。虽然碰撞处理似乎有效,但它有非常奇怪的行为。 Here是我到目前为止所拥有的。这是处理冲突的代码:

var dx = particle2.getX() - particle1.getX();
var dy = particle2.getY() - particle1.getY();
var angle = Math.atan2(dy, dx);

var newP2X = particle1.getX() + (particle1.getRadius() + particle2.getRadius()) * Math.cos(angle);
var newP2Y = particle1.getY() + (particle1.getRadius() + particle2.getRadius()) * Math.sin(angle);

particle2.setX(newP2X);
particle2.setY(newP2Y);     

var p1Vxi = particle1.getVx();
var p1Vyi = particle1.getVy();
var p1Mass = particle1.getMass();

var p2Vxi = particle2.getVx();
var p2Vyi = particle2.getVy();
var p2Mass = particle2.getMass();

var vxf = (p1Mass * p1Vxi + p2Mass * p2Vxi) / (p1Mass + p2Mass);
var vyf = (p1Mass * p1Vyi + p2Mass * p2Vyi) / (p1Mass + p2Mass);

particle1.setVx(vxf);
particle1.setVy(vyf);
particle2.setVx(vxf);
particle2.setVy(vyf);

编辑:我曾尝试将其更改为所建议的非弹性碰撞,但由于某种原因,球的碰撞不规律。看看here .

非常感谢任何帮助!

最佳答案

首先,凭直觉,想象一下将一个 bean 袋扔到结冰的池塘里。它撞击,根本不弹跳(失去任何垂直速度),并以相同的横向速度滑动。这就是我们正在尝试的那种碰撞。

现在是物理学。移动引用系。一列北行的火车经过一个谷仓。在谷仓农民的引用系中,谷仓是静止的,火车以 10 m/s 的速度向北 (0°) 移动。在火车乘客的引用系中,火车是静止的,而谷仓以 10 m/s 的速度向南 (180˚) 移动。骑自行车的人以 5 m/s 的速度向东 (90˚) 骑行(在农民的引用系中);在骑自行车的人的框架中,自行车是静止的,谷仓以 5 m/s 的速度向西 (270˚) 移动,火车以 11.18 m/s 的速度移动,方位为 333.4˚。我们可以轻松地在不同的帧之间进行转换。

两件事正在发生冲突。我们感兴趣的框架是总动量为零的框架。这称为质心框架。如果两个质量是 m1 和 m2,速度是 v1v 2,那么质心(在质心坐标系中静止的点,就像骑自行车的人坐标系中的自行车)的速度是 (m 1v1 + m2v2)/( m1 + m2)。我们计算该坐标系中两个物体的速度并继续。

物体发生碰撞。我们画了一个接触面——在这种情况下是一条在接触时刻与两个圆相切的线。这是一个瞬时构造,在所有引用系(不涉及旋转)中都相同。在质心坐标系中,每个物体的行为都好像这个边界是一个静止的固体表面——在这种情况下是一片冰,没有弹跳。因此,我们将速度矢量分为两个分量,一个平行于冰面,一个垂直于冰面;我们保留第一个并丢弃第二个。

然后我们转换回谷仓框架,我们就完成了。

关于javascript - Javascript 中的碰撞处理——粒子卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850870/

相关文章:

javascript - Jquery 自动完成与响应,作为过滤功能

javascript - 支持参数的自定义 wp.media

c# - 低帧率下的缓慢碰撞检测

python - Pygame,按轴旋转图像

javascript - 如何根据其属性值过滤充满数组的对象

javascript - threejs 光线转换 - 相机和加载的对象模型之间的交集

c# - 无法使用 Rectangle.Intersects() 正确检测碰撞

javascript - 需要让球按照击球的 Angular 行进

javascript - 游戏编程: remove movement lag (jumping)

书签图标