Java 两个二维圆之间的碰撞响应

Java 两个二维圆之间的碰撞响应,java,physics,collision,Java,Physics,Collision,我试着写一个sim卡,其中两个圆圈将发生碰撞,然后在弹性碰撞中反弹分开。每个圆都有位置、速度、质量和半径。我已经完成了碰撞检测,但我不知道如何确保得到的速度是真实的 我知道作用在每个物体上的力是相同的,并且已经计算出了产生力的角度,但是我需要找到力的大小。给定速度和速度,如何求解速度 我之所以使用力,是因为它非常适合程序的其余部分,如果有更简单的方法,请告诉我。使用动量守恒定律和能量守恒定律。你必须为每个圆假设一些虚构的质量,这将允许你求解碰撞后产生的速度 设m1和m2分别为圆c1和c2的质量,

我试着写一个sim卡,其中两个圆圈将发生碰撞,然后在弹性碰撞中反弹分开。每个圆都有位置、速度、质量和半径。我已经完成了碰撞检测,但我不知道如何确保得到的速度是真实的

我知道作用在每个物体上的力是相同的,并且已经计算出了产生力的角度,但是我需要找到力的大小。给定速度和速度,如何求解速度


我之所以使用力,是因为它非常适合程序的其余部分,如果有更简单的方法,请告诉我。

使用动量守恒定律和能量守恒定律。你必须为每个圆假设一些虚构的质量,这将允许你求解碰撞后产生的速度

设m1和m2分别为圆c1和c2的质量,速度为v1和v2。那么

m1.v1+m2.v2(碰撞前)=m1.v1+m2.v2(碰撞后)(动量对比) 上面的等式是一个向量方程


应用能量守恒:势能+动能(col之前)=势能+基恩能(碰撞之后)

首先,找出一个球是如何从具有任意角度的墙反弹的。如果v是速度向量,a是法线(垂直于墙并指向墙外的单位向量),那么v'=v-2(v.a)a给出了反弹后的速度

第二,考虑两个相等但相反动量的球的碰撞,如两个相同的球,它们具有相等但相反的速度,互相掠过。每个球的作用就像它撞到墙一样,即与两个球相切的线

第三,为了处理一般情况,我们使用。质心速度为:

vCM=(mAvA+mBvB)/(mA+mB)

这是一个观察者的速度,对他来说,两个球的动量相等且相反。该观察者框架中的速度为:

vA'=vA-vCM
vB'=vB-vCM

现在我们使用上面的解(“秒”)来计算碰撞后的速度,vA''和vB''(仍在CM帧中)。最后,我们切换回原始帧:

vA''=vA'+vCM

vB''=vB'+vCM

这是正确的,但您还需要指定碰撞后的运动方向,这取决于碰撞角度等。因为速度定义为矢量,角度是隐式指定的。用标量能量方程求解矢量方程将得到碰撞后的速度。