与两个运动物体的二维碰撞

时间:2018-12-27 15:16:11

标签: 2d collision momentum

我正在与两个运动物体进行二维碰撞。非常简单。我有两个具有不同几何形状和质量的球体。它们以45°角碰撞。我需要计算大肠菌病发生后两个球的速度向量。我找到了我在维基百科上使用的公式,并在以下问题中使用:retrieve

2D Elastic Ball Collision Physics

问题在于,产生的动量不同于开始的动量。开始的是35kg m / s,结束的是33.75kg m / s。我看了公式的证明,它使用了总动量的守恒,这很可能意味着总动量的变化应等于0。我的不是。

任何人都可以解释是什么问题或我在做什么错吗?

谢谢您的回答。

我在不同的情况下尝试了很多次,最终结果总是有些差劲。

我的代码:

import numpy as np

v_1 = np.array([3, 0]) #velocity of object 1
v_2 = np.array([0, 2]) #velocity of object 2
r_1 = 0.05 #m ; radius of sphere 1
r_2 = 0.1 #m ; radius of sphere 2
m_1 = 5 #kg ; mass of object 1
m_2 = 10 #kg ; mass of object 2

x_1 = np.array([-(r_1 + r_2)*np.cos(np.pi/4), 0]) #vector of position 1
x_2 = np.array([0, -(r_1 + r_2)*np.cos(np.pi/4)]) #vector of position 2

v_1_p = v_1 - 2*m_2/(m_1 + m_2)*((v_1 - v_2)@(x_1 - x_2))/(np.linalg.norm(x_2 - 
x_1)**2)*(x_1 - x_2) #velocity after colision for object 1 
v_2_p = v_2 - 2*m_1/(m_1 + m_2)*((v_2 - v_1)@(x_2 - x_1))/(np.linalg.norm(x_2 - 
x_1)**2)*(x_2 - x_1) #velocity after colision for object 2

v_1_p_v = np.sqrt(np.sum(v_1_p**2)) #magnitude of velocity 1 
v_2_p_v = np.sqrt(np.sum(v_2_p**2)) #magnitude of velocity 2

p_0 = np.sum(m_1*v_1 + m_2*v_2) #momentum before colision
# value: 35
p_1 = m_1*v_1_p_v + m_2*v_2_p_v #momentum after colision
# value: 33.74652441384409

我希望碰撞前的总动量与碰撞后相同。

1 个答案:

答案 0 :(得分:0)

问题:

  1. np.sum(m_1*v_1 + m_2*v_2)在数学上没有意义,因为您要添加所得动量矢量的分量,该分量不等于量值。将其更改为m_1*v_1 + m_2*v_2

  2. m_1*v_1_p_v + m_2*v_2_p_v是不正确的,因为您不能将矢量幅值相加以获得总矢量幅值– ||v1|| + ||v2|| != ||v1 + v2||。将其更改为m_1*v_1_p + m_2*v_2_p

  3. 当心2*m_2/(m_1 + m_2)中的整数除。将其更改为(2.0*m_2)/(m_1 + m_2),并将其更改为m_1