一、扩散现象简介物理学中有很多随机过程。我们可以利用pygame中很好的可视化方法来展示物理随机过程。在这里,我们展示了物理学中热膨胀现象的可视化。所谓热扩散现象,是指分子或原子本来是在某个封闭系统内部,一旦封闭系统打开,分子或原子就会向外扩散,可以说是再也回不去了到原来的状态。地位。第一种随机现象:液体中的扩散:第二种随机现象:粒子的随机运动过程:上图是液体内部扩散最常见的例子。当然我们这里写的是小球的扩散代码。2.代码实现下面是代码和代码的详细解释:importpygame#importgamelibraryimportpygame.locals#import游戏库中的所有常量importsys#importsysteminteractivemodelibraryimporttime#importtimemoduleimportrandom#importrandommoduleimportmath#importmathlibrarymodulecolor_of_ball=138,43,226#设置球的颜色color_of_screen=72,209,204#设置屏幕的颜色color_of_rect=25,25,112#设置球的颜色矩形框RADIUS=10#setradiusN=100#setthenumberofballsif__name__=='__main__':t1=time.time()#记录开始时间pygame.init()#初始化screen=pygame.display.set_mode((1000,800))#屏幕pygame.display.set_caption("KnockingBalls")#设置名称vx_list=[]vy_list=[]#设置速度列表存储不同球的速度,存储xdirection和y分别是Directionforiinrange(N):#生成速度vx_list.append(random.random()*2*(-1)**random.randint(1,2))vy_list.append(random.random()*2*(-1)**random.randint(1,2))x_list=[]y_list=[]#存储coordinatesforiinrange(N):#生成坐标x_list.append(random.randint(400,600))y_list.append(random.randint(300,500))whileTrue:foreventinpygame.event.get():#设置结束的条件是:按下关闭按钮ifevent.type==pygame.locals.QUIT:sys.exit()screen.fill(color_of_screen)#设置结束screenThecolorofforiinrange(N):t2=time.time()dt=t2-t1ifdt>10:#如果大于十秒,那么我们将移除框架,以便球可以移动randomly,whichwillMaketheballspreadoutforjinrange(N):ifj!=i:#Ican'tcollidewithmyself#考虑到如果math.sqrt((x_list[i]-x_list[j])**2+(y_list[i]-y_list[j])**2)<=RADIUS*2:#如果会发生碰撞,则重新随机设置速度vx_list[i]=random.random()*2*(-1)**random.randint(1,2)vx_list[j]=random.random()*2*(-1)**random.randint(1,2)vy_list[i]=random.random()*2*(-1)**random.randint(1,2)vy_list[j]=random.random()*2*(-1)**random.randint(1,2)#如果x_list[i]<=RADIUSorx_list[i]>不能出边界=1000-RADIUS:#如果到达边界,则在相应方向反转速度vx_list[i]=-vx_list[i]ify_list[i]<=RADIUSory_list[i]>=800-RADIUS:#If当它到达边界时,在相应的方向反转速度vy_list[i]=-vy_list[i]else:#如果在十秒内,我们会让框出现,球不能出框为jinrange(N):ifj!=i:#我不能和自己碰撞#考虑到如果math.sqrt((x_list[i]-x_list[j])**2+(y_list[i]-y_list[j])**2)<=RADIUS*2:#如果会发生碰撞,则重新随机设置速度vx_list[i]=random.random()*2*(-1)**random.randint(1,2)vx_list[j]=random.random()*2*(-1)**random.randint(1,2)vy_list[i]=随机。随机()*2*(-1)**随机。randint(1,2)vy_list[j]=随机。random()*2*(-1)**random.randint(1,2)#不能从边界出去ifx_list[i]
