Educoder Python入门-绘制炸弹轨迹(下)

第3关:绘制一条轨迹

3.某轰炸机在h=3km的高空以200m/s的速度水平匀速飞行,到达A点是投下一枚无动力炸弹,不考虑空气阻力,重力加速度g的值取9.8,我们可以通过如下公式得到炸弹在任意时候的位置。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
h, v0, g = 3000, 200, 9.8
n = 30
xt, yt = [], []
tmax = (2*h/g)**0.5
delta = tmax/(n-1)
for i in range(n):
    t = delta*i
    xt.append(v0*t)
    yt.append(h-1/2*g*t**2)
#### begin ###########
# 请使用plot函数绘制一条线
plt.plot(xt,yt,'r-')
#### end ##############
plt.grid('on')
plt.axis([0, 5000, 0, h])
plt.savefig('./student result3/轨迹.png')
plt.close()

第4关:更简单的绘制一条轨迹

使用Python的特性与numpy库, 简化绘制炸弹飞行的轨迹的方法。

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
h, v0, g, n = 3000, 200, 9.8, 30
tmax = (2*h/g)**0.5
########### begin ##############
# 请使用numpy的linspace函数,在[0, tmax]上平均取30个点
t = np.linspace(0, tmax, n) #在[0, tmax]上平均取n个点
########## end #################
xt = v0*t                       #计算n个点的横坐标
yt = h-1/2*g*t**2               #计算n个点的纵坐标
plt.plot(xt, yt, 'r-')
plt.grid('on')
plt.axis([0, 5000, 0, h])
plt.savefig('./student result4/轨迹.png')
plt.close()

第5关:绘制多条轨迹

5.某轰炸机在高空匀速飞行,到达A点是投下一枚无动力炸弹,不考虑空气阻力,重力加速度g的值取9.8,我们可以通过如下公式得到炸弹在任意时候的位置。

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
def calBombTrace(h, v0):
    g, n = 9.8, 30
    tmax = (2*h/g)**0.5
    t = np.linspace(0, tmax, n)
    xt = v0*t
    yt = h-1/2*g*t**2
    ##### begin ############
    # 函数bia返回xt,yt
    return xt, yt
    ###### end #############
H, V0 = [3000, 2000], [200, 260]
for h in H:
    for v0 in V0:
        xt, yt = calBombTrace(h, v0)
        plt.plot(xt, yt)
plt.grid('on')
plt.axis([0, 6500, 0, 3000])
plt.savefig('./student result5/轨迹.png')
plt.close()

你可能感兴趣的:(python,python)