5

我一直在学习物理编程中的碰撞,我有一个很大的疑问。

在球体中思考,当一个球体同时与 2 个碰撞时,我认为使两个球体移动的力大小必须除以 2。但是当我对其进行编程时,我总是看到一个球体的速度比第二个球体的速度快,导致我编程它的方式首先与另一个球体发生碰撞。让我们展示一张图片来清楚地画出问题:

在此处输入图像描述

起初它检测到红色球体。然后检测到碰撞,力的大小就像只有一个球体。然后它检测到橙色球体,并且力大小小于第一个。

知道我必须用什么来编程这个,或者我有什么误解吗?

模组

此外,如果你帮我寻找一种可以很好地实现这一点的机制,我会给你 50+ 更多。

4

4 回答 4

1

在计算任何力、速度、能量等变化之前,请小心测试所有可能的成对相互作用。听起来你的物理模拟很高兴在它检测到第一次碰撞后立即计算动力学。

于 2012-04-30T06:07:13.217 回答
1

DarenW 的意思(作为一个 n00b,我不能直接评论他的回答)是序列应该是这样的:

//test for collisions
blueHitRed = didCollide(blue, red)
blueHitOrange = didCollide(blue, orange)
...
//calculate resultant velocities
red.velocity = ...
orange.velocity = ...
blue.velocity

而从你的描述看来,这样的事情实际上正在发生

//red
blueHitRed = ...
red.velocity = ...
blue.velocity = ...
//orange
blueHitOrange = ...
orange.velocity = ...
blue.velocity = ...
于 2012-05-03T20:53:43.957 回答
1

问题是对于两体碰撞,能量守恒和动量守恒基本上足以确定结果,但对于三体问题,情况不再如此。即使你按照 Mark 和 Daren 的建议做,并在一个时间步内确定所有碰撞物体,它也不能真正让你到达任何地方,因为 1)你仍然不知道如何在碰撞后移动物体;和 2) 在每次碰撞期间要考虑多少个对象的主要问题不是时间步长,而是对象的变形,如果你正确对待这一点,一个时间步长内的更新顺序将无关紧要。例如,如果您有非常柔软的物体,它们可能会接触很多时间步长,而非常硬的物体只会接触几个时间步长。

这个问题的一个好的答案有点棘手,而这个问题的原因包含在你的奖励问题中,即机制是什么。该机制基本上只是您在简化问题中没有考虑的事情:物体的变形、滑动、旋转等,但这些通常是三体碰撞中的主要问题。

你做什么完全取决于你需要多少准确性。您可以假设所有碰撞都发生在两个对象之间,或者第三个碰撞两个对象总是完全对称的(这是一个非常罕见的事件)。作为一个更准确的开始,您可以只考虑它们是可变形的物体,假设每次碰撞都有一个时刻,当一切都发生最大变形时,这些变形产生的力是什么,并根据这些力发送东西( F=dp/dt)。不过,可以进行其他近似,比如根据首先被击中的一个来划分动量传递,并给它一个与 do(变形量)/(到下一个物体的距离)成比例的量,或类似的东西。

于 2012-05-09T04:10:53.263 回答
-2

这是N 体问题的一个例子。一般来说,没有解析解,所以你只能得到一个近似值。将其视为两个单独的碰撞是一个足够好的近似值。

[编辑]澄清:当三个物体都相互作用时,在很短的时间内,这是n体问题。不是牛顿 n 体问题,而是更一般的情况。

于 2012-04-29T04:16:24.430 回答