网站首页 > 编程文章 正文
杂谈
小卡在刚学习编程的时候,就非常喜欢鼓捣一些字符相关的代码。因为还没学会如何写 GUI,因此只能用字符来实现界面的一些内容。
一来,能够快速学习编程技巧,二来至少字符是能够看得到的东西,至少做的东西可以让别人看到。
今天我们来实现一个比较有趣的代码,让一个字符实现物理引擎的下落,并在落地后进行弹跳,模拟真实场景,咱们让字符也感受一下物理世界!
一、实现效果
我们首先来看看今天实现的代码,它的效果如何:
下落动画
因为是字符,我们甚至可以用一句话来模拟下落:
字符串下落动画
怎么样,非常有趣吧!如果你刚刚开始学,把这个东西拿出去给你的同学看,这不得走路都带风!
二、理清思路
首先,我们要让字符来到物理世界,那么必须实现一些算法。我们知道地球的重力加速度是 9.8m/s^2,所以在代码中我们也将延续使用它:
GRAVITY = 9.8
我们将一个字符的高度作为 1m,这样就能够直接和9.8挂上钩,更方便计算。
另外为了能够更新我们的位置信息,我们需要一个 速度和更新位置信息的公式,我们将使用 匀变速运动位移公式 来实现更新:
修改为代码则为:
def update_pos(y, v, t):
return y + v * t + 0.5 * GRAVITY * t ** 2
我们还需要一个底线,不然会一直下坠,变成一个无底洞:
BOTTOM_HEIGHT = 20
现在我们仅需要设置一个初始的速度,进行下落,然后通过 重力加速度 修正速度,再通过 update_pos() 来更新位置,当触底后,我们将速度相反,并削减速度,即可实现真实的物理下落的动画了。
三、完整代码
import time
import os
INIT_Y = 0
VELOCITY = 0
GRAVITY = 9.8
BOTTOM_HEIGHT = 20
def update_pos(y, v, t):
return y + v * t + 0.5 * GRAVITY * t ** 2
def simulate():
global INIT_Y, VELOCITY
dt = 0.1
min_velocity = 0.5# 速度停止阈值
while True:
new_y = update_pos(INIT_Y, VELOCITY, dt) # 更新位置
VELOCITY += GRAVITY * dt # 更新速度
# 如果新的位置超过底部高度了,则表示触底
if new_y >= BOTTOM_HEIGHT:
new_y = BOTTOM_HEIGHT
VELOCITY = -VELOCITY * 0.5# 碰撞阻尼,速度相反并减小速度
# 速度过小时停止运动
if abs(VELOCITY) < min_velocity:
VELOCITY = 0
new_y = BOTTOM_HEIGHT # 强制锁定位置
# 清空控制台
os.system('cls' if os.name == 'nt' else 'clear')
print('\n' * int(new_y) + 'Python拉皮巴拉')
INIT_Y = new_y
time.sleep(dt)
simulate()
四、总结
通过编程我们可以实现很多数学和物理公式,通过这些公式我们可以实现很多非常有趣的效果,当然包括今天的字符下落动画。
如果你把今天的内容,改成gui可视的,那么你可能会实现一个效果非常不错的等待动画,所以还不赶紧去试试!
猜你喜欢
- 2025-06-10 PTC-Creo-仿真功能-Creo-Simulate
- 2025-06-10 他坐轮椅12年获百万补助,背后却藏着可怕的秘密
- 2024-08-12 电气类专业常用词汇1052个(电气专业词汇app)
- 2024-08-12 GRE阅读高频词汇分享(43)(gre阅读单词)
- 2024-08-12 从“A”到“Z”,看懂军校生的文化统考!
- 2024-08-12 西部世界第二季第六集托福雅思GRE词汇表
- 2024-08-12 Process Simulate 安装教程(processsimulate安装教程)
- 2024-08-12 工艺仿真Process Simulate新版本功能介绍
- 2024-08-12 图虫胶片摄影:SIMULATE WIMTAGE.(图虫摄影教程)
- 2024-08-12 “标准化病人”走进医学生课堂(标准化病人培训系列教材)
你 发表评论:
欢迎- 最近发表
-
- 「完结13章」Python+Vue 全栈开发BI数据可视化项目
- 为什么前端要学JavaScript?JS都有哪些逆天的功能?
- 可视化大屏设计秘籍:功能布局配色全方位解读,新手也能轻松上手
- 5个常用的canvas/js数据可视化库推荐
- LPL比赛数据可视化,完成这个项目,用尽了我的所有Python知识
- Wincc如何通过OPC连接实现数据接入
- OPC Router中央通信平台软件协助打造高度智能化物流港口
- Tyler, The Creator《CALL ME IF YOU GET LOST》:贴近生活的不定与禁忌
- 首首经典!英国歌手John Waite作品If You Ever Get Lonely
- Talks with China will not materialize if the White House expects all get no give
- 标签列表
-
- spire.doc (70)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)