f1 = ( (m1-m2)/(m1+m2) )*v1 + ( (m2*2 )/(m1+m2) )*v2
f2 = ( (m1*2 )/(m1+m2) )*v1 + ( (m2-m1)/(m1+m2) )*v2
如果两个物体朝同一方向碰撞时不起作用
任何帮助都将受到启发
答案 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
为其他对象做同样的事情