用质量计算弹跳物体的速度(线性)

时间:2016-06-23 02:27:59

标签: game-physics linear bounce

如何计算具有质量的弹跳物体的速度?
enter image description here

f1 = ( (m1-m2)/(m1+m2) )*v1 + ( (m2*2 )/(m1+m2) )*v2
f2 = ( (m1*2 )/(m1+m2) )*v1 + ( (m2-m1)/(m1+m2) )*v2

如果两个物体朝同一方向碰撞时不起作用

任何帮助都将受到启发

1 个答案:

答案 0 :(得分:1)

对于1d对象

v 1 =(u 1 (m 1 -m 2 )+ 2m 2 Ú 2 )/(米<子> 1 + M <子> 2

v 2 =(u 2 (m 2 -m 1 )+ 2m 1 Ú 1 )/(米<子> 1 + M <子> 2

其中v 1 和v 2 是之后的速度,u 1 和u 2 之前是速度,m 1 ,m 2 是每个的质量。

您给出的公式是相同但简化的版本。顺便说一句,您的代码块在第1行上有错误。第5版var b2应为m2

如果物体朝同一方向移动,这将给出正确的速度。我可以认为你可能做错了不包括标志。如果两个物体在同一方向上移动,则两个速度输入u 1 且u 2 将具有相同的符号。对于所有其他碰撞,它们每个都会有不同的符号。

如果您在2D情况下应用上述内容,则需要修改公式。这是圆的解决方案,其中接触点沿着它们之间的角度'p'。

//
//      u1 * cos(d1 - p) * (m1 - m2) + 2 * m2 * u2 * cos(d2 - p)
//V1x = -------------------------------------------------------- * cos(p) + u1 * sin(d1 - p) * cos(p + PI / 2)
//                           m1 + m2

//      u1 * cos(d1 - p) * (m1 - m2) + 2 * m2 * u2 * cos(d2 - p)
//V1y = -------------------------------------------------------- * sin(p) + u1 * sin(d1 - p) * sin(p + PI / 2)
//                           m1 + m2

为其他对象做同样的事情

  • v1x,v1y是速度的结果x,y分量
  • u1,u2是速度。
  • m1,m2是质量
  • d1,d2以弧度为单位的运动方向。
  • p是接触角。这是从第一个中心开始的角度 对象到第二个对象的中心,接触点打开 这个角度描述的那条线。