Python使用matplotlib绘制抛体运动高度角度图仅显示空白无折线问题
问题原因及修正方案
- 仅传入单个角度、单个计算值调用
plt.plot():plot默认绘制折线,单个点无连续线段自然显示空白,额外对数值做int强制转换还会丢失精度 - 未生成多组角度序列:要绘制高度、射程随角度变化的趋势图,需要覆盖0~90度的全范围角度数据,仅单组输入无法生成变化曲线
- 物理公式错误:
- 最大高度正确公式为 $H = \frac{V_0^2 \cdot sin2\theta}{2g}$,原代码中错误对角度做平方运算,且分母误用$g2$
- 射程正确公式为 $R = \frac{V_0^2 \cdot sin2\theta}{g}$,原代码遗漏sin内的2倍角度参数
- 坐标轴映射错误:要绘制参数随角度变化的曲线,x轴应为角度值,y轴为对应的高度/射程值,原代码写反了x、y入参顺序
修正后可运行代码
import matplotlib.pyplot as plt import numpy as np def projectile(Vo, input_angle): Acc = 9.8 # 生成0到90度的角度序列,步长1度 angle_arr = np.arange(0, 91, 1) # 按正确公式批量计算最大高度、射程 height_arr = (Vo ** 2) * (np.sin(np.radians(angle_arr)) ** 2) / (2 * Acc) range_arr = (Vo ** 2) * np.sin(np.radians(2 * angle_arr)) / Acc # 绘制两条曲线,加标签区分 plt.plot(angle_arr, height_arr, label='最大高度') plt.plot(angle_arr, range_arr, label='射程') # 添加图表标注 plt.xlabel('抛射角度(度)') plt.ylabel('数值(米)') plt.title(f'初速度{Vo}m/s下抛体运动参数随角度变化') plt.legend() plt.grid() plt.show() # 返回指定角度对应的计算值 return ("Maximum Height: ", height_arr[input_angle], "Maximum Range: ", range_arr[input_angle]) # 主逻辑 Vo = int(input("Enter Velocity: ")) Angle = int(input("Enter Angle: ")) print(projectile(Vo, Angle))
内容的提问来源于stack exchange,提问作者MaxX
相关产品推荐
相关产品推荐

