与两个移动物体的二维碰撞
Two-dimensional collision with two moving objects
我正在研究与两个移动物体的二维碰撞。它非常简单。我有两个具有不同几何形状和质量的球体。它们以 45° 角碰撞。我需要计算碰撞后两个球体的速度矢量。我在维基百科和这个问题中找到了一个公式:2D Elastic Ball Collision Physics
问题是最终的势头与开始的势头不同。首发35kgm/s,末发33.75kgm/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
我预计碰撞前的总动量与碰撞后的相同。
问题:
np.sum(m_1*v_1 + m_2*v_2)
没有数学意义,因为您要添加合成动量矢量的分量,这不等于幅度。将其更改为 m_1*v_1 + m_2*v_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
.
注意整数除法 2*m_2/(m_1 + m_2)
。将其更改为 (2.0*m_2)/(m_1 + m_2)
,m_1
.
也同样如此
我正在研究与两个移动物体的二维碰撞。它非常简单。我有两个具有不同几何形状和质量的球体。它们以 45° 角碰撞。我需要计算碰撞后两个球体的速度矢量。我在维基百科和这个问题中找到了一个公式:2D Elastic Ball Collision Physics
问题是最终的势头与开始的势头不同。首发35kgm/s,末发33.75kgm/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
我预计碰撞前的总动量与碰撞后的相同。
问题:
np.sum(m_1*v_1 + m_2*v_2)
没有数学意义,因为您要添加合成动量矢量的分量,这不等于幅度。将其更改为m_1*v_1 + m_2*v_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
.注意整数除法
2*m_2/(m_1 + m_2)
。将其更改为(2.0*m_2)/(m_1 + m_2)
,m_1
. 也同样如此