某轰炸机在ℎ(m)高空以v_0(m/s)的速度水平匀速飞行,到达A点时投下一枚无动力炸弹,不考虑空气阻力,在时间点t的纵坐标为 x=v0t,横坐标为y=h-1/2g*t**2;请生成等分时间点序列(如1s)对应的炸弹横坐标和纵坐标的列表xt,yt并输出。(g=9.8m/s^2)。
请基于列表推导式的方式编写代码。
代码和注释如下:
>>> h=3000
>>> v0=30
>>> [(v0*t, round(h-9.8*t**2/2,2)) for t in range(30)]
[(0, 3000.0), (30, 2995.1), (60, 2980.4), (90, 2955.9), (120, 2921.6), (150, 2877.5), (180, 2823.6), (210, 2759.9), (240, 2686.4), (270, 2603.1), (300, 2510.0), (330, 2407.1), (360, 2294.4), (390, 2171.9), (420, 2039.6), (450, 1897.5), (480, 1745.6), (510, 1583.9), (540, 1412.4), (570, 1231.1), (600, 1040.0), (630, 839.1), (660, 628.4), (690, 407.9), (720, 177.6), (750, -62.5), (780, -312.4), (810, -572.1), (840, -841.6), (870, -1120.9)]
>>> s=[(v0*t, round(h-9.8*t**2/2,2)) for t in range(30) if round(h-9.8*t**2/2,2)>0]
>>> len(s)
25
>>>'''
# 加判断条件,假设地面为0海拔,说明第25秒已落地了。
#元组推导式要用 tuple()强制转换
'''
>>>tuple([(v0*t, round(h-9.8*t**2/2,2)) for t in range(30)])
((0, 3000.0), (30, 2995.1), (60, 2980.4), (90, 2955.9), (120, 2921.6), (150, 2877.5), (180, 2823.6), (210, 2759.9), (240, 2686.4), (270, 2603.1), (300, 2510.0), (330, 2407.1), (360, 2294.4), (390, 2171.9), (420, 2039.6), (450, 1897.5), (480, 1745.6), (510, 1583.9), (540, 1412.4), (570, 1231.1), (600, 1040.0), (630, 839.1), (660, 628.4), (690, 407.9), (720, 177.6), (750, -62.5), (780, -312.4), (810, -572.1), (840, -841.6), (870, -1120.9))
>>>
如有帮助,请采纳。谢谢!
>>> def bomb_trace(h, v0, delta=1, g=9.8):
t_max = int(pow(2*h/9.8, 0.5))
xt = [v0*t for t in range(t_max+1)]
yt = [h-g*pow(t,2)/2 for t in range(t_max+1)]
return xt, yt
>>> import matplotlib.pyplot as plt
>>> xt, yt = bomb_trace(10000, 100) # 以1万米高空,飞行速度100m/s为例,绘制炸弹轨迹如下图
>>> plt.plot(xt, yt)
[<matplotlib.lines.Line2D object at 0x000001998A691208>]
>>> plt.show()