程序员开发实例大全宝库

网站首页 > 编程文章 正文

当python字符和物理世界相关联,那就太有趣了

zazugpt 2025-06-10 03:38:44 编程文章 2 ℃ 0 评论

杂谈

小卡在刚学习编程的时候,就非常喜欢鼓捣一些字符相关的代码。因为还没学会如何写 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可视的,那么你可能会实现一个效果非常不错的等待动画,所以还不赶紧去试试!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表