问题阐述
A,B两球在同一平面里,A球有一初速度,B球无初速度,一段时间后两球发生碰撞。
两球碰撞时接触力模型假设:
数值仿真:
(R为两球的半径,mA为A球质量,mB为B球质量,rA0为A球的初始位置,VA0为A球的初始速度,rB0为B球的初始位置,VB0为B球的初始速度。)
解题过程
解题思路
(1)两球之间的的距离r可以根据勾股定理求得。
(2)①当r>=2R时,两者间无作用力,各自的位置等于ri+v(i+1)dt。②当r<2R时,可以根据公式计算出它们间的作用力Fi,对于A为Fi,对于B为-Fi。根 据动量定理可得v(i+1)=Fidt/m+vi,r(i+1)=ri+v(i+1)*dt。
(3)作图。
程序编写
运用改进欧拉法来进行数值积分。
首先引入库。
from numpy import*
import matplotlib.pyplot as plt #引入库
参数初始化。
R = 0.02
ma = 0.1
mb = 0.1
k = 20000
df = 1.0
time = 0.1
dt = 0.0001 #设置数值
n = int(time/dt)
t = zeros(n,float)
ra = zeros((n,2),float)
rb = zeros((n,2),float)
va = zeros((n,2),float)
vb = zeros((n,2),float)
f = zeros((n,2),float) #设置数值
ra[0] = array([0.0,0.0])
rb[0] = array([0.08,0.018])
va[0] = array([1.0,0.0])
vb[0] = array([0.0,0.0]) #初始化
因为是二维的,所以用向量来进行计算。
进行数值积分。
for i in range(n-1):
dr = sqrt((ra[i][0] - rb[i][0])**2+(ra[i][1]-rb[i][1])**2)
if dr >= 2*R:
f[i] = 0
va[i+1] = va[i]
vb[i+1<