Python可视化物理随机过程—pygame学习笔记2

文章目录

  • Python可视化物理随机过程---pygame学习笔记2
  • 一、扩散现象的简单的介绍
  • 二、代码实现
  • 三、运行代码的效果展示
  • 四、总结

一、扩散现象的简单的介绍

在物理中有很多的随机过程,我们可以利用pygame中不错的可视化方法来进行物理随机过程的展示。

在此处,我们展示一下,物理之中的热学里面的扩算现象的可视化呈现。

所谓的热学里面的扩散现象就是说:原本分子或者原子在某一个封闭体系内部,但是,一旦打开这个封闭体系,那么分子或者原子就是会向外部进行扩散,而且,可以说根本不可能返回到最初的状态了。
第一个随机现象:
液体中的扩散:

第二个随机现象:
粒子的随机运动过程:

以上这个图片是最常见的液体内部的扩散的例子了。

当然,我们在此处所写的是小球的扩散代码了啦。

二、代码实现

此处给出代码以及代码的详细注释解说:

import pygame
# 导入游戏库import pygame.locals
# 导入游戏库中的所有常量import sys
# 导入系统交互模式的库import time
# 导入时间的模块import random
# 导入随机模块import math
# 导入数学库模块color_of_ball = 138, 43, 226
# 设置球的颜色color_of_screen = 72, 209, 204
# 设置屏幕的颜色color_of_rect = 25, 25, 112
# 设置矩形框框的颜色RADIUS = 10
# 设置半径N = 100
# 设置球的个数if __name__ == '__main__':t1 = time.time()# 记录一下开始的时间pygame.init()# 初始化screen = pygame.display.set_mode((1000, 800))# 屏幕pygame.display.set_caption("Knocking Balls")# 设置名称vx_list = []vy_list = []# 设置速度的列表来存储不同的球的速度,分别存储 x 方向以及 y 方向for i in range(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 = []# 存储坐标for i in range(N):# 生成坐标x_list.append(random.randint(400, 600))y_list.append(random.randint(300, 500))while True:for event in pygame.event.get():# 设置结束的条件为:按下一个关闭的按钮if event.type == pygame.locals.QUIT:sys.exit()screen.fill(color_of_screen)# 设置屏幕的颜色for i in range(N):t2 = time.time()dt = t2 - t1if dt > 10:# 如果大于了十秒,那么我们就去掉框框,使得小球可以随机的运动,从而会使得小球扩散出去for j in range(N):if j != i:# 自己不能和自己进行碰撞# 考虑到会发生碰撞if 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)# 不能从边界出去了呦if x_list[i] <= RADIUS or x_list[i] >= 1000 - RADIUS:# 如果到了边界,那么就使得相应的方向上的速度反向vx_list[i] = - vx_list[i]if y_list[i] <= RADIUS or y_list[i] >= 800 - RADIUS:# 如果到了边界,那么就使得相应的方向上的速度反向vy_list[i] = - vy_list[i]else:# 在十秒以内的话,我们就使得框框呈现出来,小球不可以出框框for j in range(N):if j != i:# 自己不能和自己进行碰撞# 考虑到会发生碰撞if 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)# 不能从边界出去了呦if x_list[i] < RADIUS + 390 or x_list[i] > 610 - RADIUS:# 如果到了边界,那么就使得相应的方向上的速度反向vx_list[i] = - vx_list[i]if y_list[i] < RADIUS + 290 or y_list[i] > 510 - RADIUS:# 如果到了边界,那么就使得相应的方向上的速度反向vy_list[i] = - vy_list[i]# 绘制一个矩形来框住所有的球,这些球不能抛出框框到框框的外面去pygame.draw.rect(screen, color_of_rect, (380, 280, 240, 240), width=3)# 进行移动小球的位置x_list[i] += vx_list[i]y_list[i] += vy_list[i]# 绘制小球的位置以及大小颜色等信息pygame.draw.circle(screen, color_of_ball, (x_list[i], y_list[i]), RADIUS, width=5)time.sleep(0.001)# 睡眠 0.001 秒钟的时间pygame.display.update()# 更新画面

在这里面,所运用到方法全部都在我的另外一篇博文中有详细地介绍,如果不太清楚可以参考下方链接:
https://blog.csdn.net/m0_54218263/article/details/116898636?spm=1001.2014.3001.5502
里面有对于Pygame入门的简单操作以及一些方法的简单介绍。

三、运行代码的效果展示

这里我的代码实现的是:小球在不断的运动,同时彼此之间会发生一些碰撞以及其他的一些相互作用,这是一个动态的效果,但是,由于目前这里不方便发一个视频,所以,我才用不同的阶段使用不同的图片来表示出来了啦。

图片1、
初始的状态:

图片2、
框框存在时的装态:

图片3、
去掉框框以后不久的装态:

图片4、

图片5、
较长时间以后的状态:

图片6、
较长时间以后的状态:

图片7、
较长时间以后的状态:

四、总结

综上所述,我们使用Python代码实现了随机扩散现象的可视化处理,我们使用了Pygame这个模块使得扩散过程清晰的呈现了出来。

而且,我们也可以看到在去掉框框以后,小球都会向别的方向随机的扩散,最后的结果是小球几乎会均匀的分布在整个屏幕之上,而且不会回归到最开始的状态的,这是由于熵增原理导致的结果,系统会趋向于无序而不是有序,所以会几乎均匀的分布于屏幕之内。

总之,感谢大家的阅读以及支持了啦。

谢谢大家提出建议或者意见,敬请期待各位大佬的指正。

后续还会继续推出Pygame的学习笔记,希望大家敬请期待。

Python可视化物理随机过程---pygame学习笔记2相关推荐

  1. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

  2. Pygame学习笔记 4 —— 时间与运动

        还记得我们在之前的程序中如何让兔子动起来的吗,没错,使用event模块检测键盘事件,改变绘图的坐标,画面刷新后兔子就移动了.接下来我们细说如何精确控制时间和运动. 主要内容: pygame的时 ...

  3. Pygame学习笔记 6 —— 3D游戏

        pygame是是上世纪的产品,虽然不适合最3D游戏,但我可以使用pygame来绘制简单的3D图形,就像在白纸上画立体图形一样. 主要内容: 视觉上的远近.3D空间.绘制一个空间图形 一.视觉上 ...

  4. Python预测 数据分析与算法 学习笔记(特征工程、时间序列)

    微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...

  5. 【Pygame 学习笔记】8.精灵

    术语"精灵"是旧计算机和游戏机的保留.这些较旧的盒子无法以足够快的速度绘制和擦除普通图形,使其无法用作游戏.这些机器有特殊的硬件来处理需要快速动画的游戏对象.这些对象被称为&quo ...

  6. Canvas 数学、物理、动画学习笔记一

    Canvas 第五章 数学.物理和运动学习笔记 让人映像深刻的运动,需要我们不只是简单的知道如何移动对象,还需要知道怎么按用户期望看到的方式去移动它们.这些需要基于数学知识的基本算法和物理学作用. 基 ...

  7. Python基础教程-菜鸟教程学习笔记1

    Python基础教程-菜鸟教程学习笔记1 文章目录 Python基础教程-菜鸟教程学习笔记1 前言 Python 简介 1. 第一个Python程序 2. Python 中文编码 3. 基本语法 1) ...

  8. python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)

    最近我参加了一个人工智能与自然语言处理的课程,这是第一周的学习笔记.这份笔记不涉及一般知识,全部都是与实践(我在这门课上的作业)有关的总结. 文章目录理论学习人工智能的五种模型:作业1. Rule B ...

  9. python __name__怎么使用_python学习笔记26(python中__name__的使用)

    在python中,每个py文件都是一个模块,也都是一个可执行文件,即包含main方法.因此,对每个py文件,可以单独运行,也可以import它给其他客户使用,这两种情况不一样. 1. 如果模块是被导入 ...

最新文章

  1. GitBook关联GitHub
  2. vue 不识别svg_vue中引用svg,vue引入svg不显示,vue引用svg配置,vue3.0+ts如何配置svg...
  3. 关于相机标定的问题答复网友
  4. java简单的复数类_Java练习 SDUT-4303_简单的复数运算(类和对象)
  5. ssm项目中使用拦截器加上不生效解决方案
  6. 吉日嘎拉DotNet.BusinessV4.2中的一处bug,及我的修复和扩展
  7. C#设计模式之二十一访问者模式(Visitor Pattern)【行为型】
  8. 设计模式(一)六大原则
  9. MySQL之存储引擎,数据类型,约束条件
  10. 使用 Gogs 搭建自己的 Git 服务器
  11. android studio项目同步失败,java - 在android studio 3.2中Gradle项目同步失败 - 堆栈内存溢出...
  12. SQLyog:Error Code : 1583 Incorrect parameters in the call to native function ‘concat‘
  13. 「我是为“数据”去的京东」对话京东供应链首席科学家申作军
  14. base64加密原理详解
  15. 维吉尼亚密码的破解算法及python代码实现
  16. 《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a(a\le 10^9)a(a≤10 9 ) 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除2向下取整)第几天变为1
  17. 了解痘痘起因才能彻底告别痘痘烦恼
  18. 学校计算机学院教学管理ER图,教学管理系统数据库ER图及SQL语句.doc
  19. 软件需求——需求规格说明书模版(三)
  20. 【嵌入式04.2】STM32F103C8T6的简易流水灯仿真(寄存器实现+STM32CubeMX实现)

热门文章

  1. 字节内部人手一份,超大指令集鼠标垫,我粉丝每人包邮送一块!
  2. webapi 接口返回生成中国式 复杂表格,字节数据
  3. 一秒就被盗走密码,Chrome的安全措施就是摆设
  4. 如何使用kaldi训练得到录制音频的mfcc数据
  5. MATLAB针对大于2GB变量保存的问题
  6. c语言递归函数实现目录复制,C语言(递归遍历文件夹)实现文件批量复制
  7. 支付宝开放平台2.0签名、验签失败以及PHP-SDK使用说明
  8. “网络威慑力”是个危险的游戏
  9. python如何解决报错:‘platformVersion’ must be of type string
  10. WWN,WWNN,WWPN三者的区别