光滑的地面上放着大小两个滑块,左边是墙。大滑块的质量是小滑块的 n 倍。给大滑块一个向左的初速度,两个滑块之间,以及小滑块与墙之间会发生多次碰撞。假设碰撞没有能量损失,问一共会发生多少次碰撞?
当 n 为100的倍数时结果会是π的前若干位:
for i in range(1,9):
m1=100**i
print('m1='+str(m1))
#m1 = float(input('m2=1KG,m1='))
m2 = 1.0
v1 = -1
i = 0
t = 0
vv1 = (m1 - m2) * 0.1 / (m1 + m2) * 10 * v1
vv2 = 0.2 * m1 / (m1 + m2) * v1 * 10
v1 = vv1
v2 = vv2
L = 50
i = 1
while 1 == 1:
i += 1
# 由上次数据计算本次碰撞
t = 0.2 * L / (v1 + v2) * 10
v2 = -v2
# 新数据
L = L - v1 * t
vv1 = ((m1 - m2) * v1 + 2 * m2 * v2) * 0.1 / (m1 + m2) * 10
vv2 = ((m2 - m1) * v2 + 2 * m1 * v1) * 0.1 / (m1 + m2) * 10
v1 = vv1
v2 = vv2
i += 1
if v1 > 0:
if v2 > 0:
break
print(i)