用python模拟抛物线运动

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
v0=float(input("初速度v0="))
a=float(input("请输入发射角度:"))

# 计算抛体运动轨迹的函数
def 抛物线运动(t, v0, a):     
    g = 9.8  # 重力加速度
    x = v0 * np.cos(a) * t
    y = v0 * np.sin(a) * t - 0.5 * g * t**2
    return x, y

# 创建一个空白的画布
fig, ax = plt.subplots(figsize=(10,7))  # 设置画布尺寸为10英寸宽,7英寸高
trajectory, = ax.plot([],[],'r')  # 绘制轨迹的线条,设置颜色为红
point, = ax.plot([],[], 'bo')  # 绘制抛体位置的点

# 设置坐标轴范围
ax.set_xlim(0, 25)
ax.set_ylim(0, 10)

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')

# 设置标题
ax.set_title("homework")

# 更新函数,用于每一帧更新抛体位置
def 更新(frame):
    t = frame * 0.1
    x, y = 抛物线运动(t, v0, np.pi*a/180)  # 初始速度为v0,发射角为a度
    trajectory.set_data(np.append(trajectory.get_xdata(), x), np.append(trajectory.get_ydata(), y))
    point.set_data([x],[y])
    return trajectory, point

# 创建动画
animation = FuncAnimation(fig, 更新, frames=range(50),  interval=100) #frame从1到50取值,间隔时间设置为100ms

# 显示动画
plt.show()

用python模拟抛体运动

摘要:

本文通过Python编程语言,利用matplotlib库,对抛体运动进行了模拟与分析。首先介绍了抛体运动的基本理论,求出水平和竖直方向上的位移和时间的关系。然后利用matplotlib中的动画功能,展示了抛体在空中的运动轨迹。

关键词:抛体运动、python编程、动画。

引言:抛体运动是力学中一个重要的研究对象,它描述了一个在重力作用下以一定初速度和发射角度抛出的物体的运动轨迹。抛体运动不仅具有理论上的重要性,而且在实际生活中也有诸多应用,比如运动员的抛物线投掷、炮弹的抛物线轨迹等。本文旨在通过程序模拟和动画展示,深入理解抛体运动的规律和特点。

方法:

  • 分析抛体运动的特点

理想情况下,在抛体运动中,物体只受到重力,假设发射角为θ,初速度为v0,对初速度进行正交分解,水平方向上初速度Vx=v0*cosθ,竖直方向上初速度Vy0=v0*sinθ,水平速度不变,竖直速度与时间t的关系是:Vy= v0*sinθ-gt,从0到t积分,可以得到水平位移x=( v0*cosθ)*t,竖直位移y=(v0*sinθ)*t-0.5gt。而我们描绘不同时间下的点,并且用直线连接这些点,就能得到图像,连线的间隔越小,图像越光滑,当间隔趋向于无穷小时,图像就是一条光滑的曲线。

  • 分析步骤:

1.创建一个空白的画布

2.设置坐标轴

3.描绘不同时间下点的位置,连点成线

4.创建动画

三、编程

1.编程环境配置:首先,在python官网内下载IDLE,安装后,打开命令指示符,输入pip install numpy,按回车后等待安装完成,完成后再输入pip install matplotlib,按下回车,等待安装完成。在代码中,我们用到了三角函数,因此必须使用numpy, 而matplotlib可以帮助我们制作函数的动画。

2.编程:

      首先,我们定义初速度和发射角,初速度记为v0,发射角记为a,由于大多数情况下这两个值是小数,因此我们使用float将输入的数字转化为浮点数,例如:v0=float(input("初速度v0="))。

然后,我们定义抛物线的函数,用参数方程表示坐标,其代码为:x = v0 * np.cos(a) * t ,y = v0 * np.sin(a) * t - 0.5 * g * t**2。

接下来,我们创建一个空白的画布,设置为10英寸宽,7英寸高,绘制轨迹的线条,设置颜色为红。代码如下

然后是代码最主要的部分,我们使t从0到50取值,取值的间隔为0.1,将输入的a转化为弧度制,并且绘制线条和动点,代码如下:

这样我们就完成了主要部分。

以下为整个程序的代码:

运行代码,输入初速度为15, 发射角为60度,我们可以得到如下图形:

而我们将以上代码作为模板,改变函数,可以得到其他的图形,例如李萨如图像

为了让图形看起来更连续,我们应该缩短连点成线的时间,但是取点的间隔时间太长,导致曲线不光滑,我们进一步缩短取点的时间,将更新函数下的0.1改为0.01,将frame的取值增加为5000,并且将interval改为10,这里interval用来控制描点的速度,单位为毫秒,将interval设置为10表示绘制两个点的时间间隔为10毫秒,并不意味着t的各个取值之间差值为10毫秒,而t的取值间隔差由t = frame * 0.01决定,其中0.01代表t的取值之间差值为0.01秒。下图为A=20、k=2、n=4、m=5、w=1的效果,由于python不方便打罗马符号,因此角速度用w代替。

总结:

通过运行程序,我们可以得到具体的抛体运动图形。可以根据需要调整参数,绘制不同的抛体运动轨迹。还可以更改代码的函数,绘制李萨如图像等其他图形。

总结起来,通过使用Python编程语言和matplotlib库,我们可以方便地模拟和分析各种运动,进一步理解抛体运动的规律和特点。这对于学习力学和应用于实际问题都具有重要意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值