Python脚本运行无报错无法输出图像且plot无法识别max_range问题求助
问题修复方案
核心问题1:max_range无法识别警告
max_range是trajectory函数内部定义的局部变量,作用域仅局限于该函数内部,plot函数无权直接访问,因此VSCode会弹出无法解析的黄色提示。
核心问题2:无图像输出
主程序仅调用了trajectory函数计算轨迹数据,但既没有存储函数返回的坐标值,也没有调用plot函数触发绘图逻辑,因此不会生成图像。
完整修复代码
import argparse import logging import math import os import sys import tkinter as tk from tkinter import filedialog, PhotoImage import matplotlib.pylab as plt import numpy as np def trajectory(x0: int, y0: int, v0: int, theta: int, g: float) -> tuple: launch_angle = (theta * (math.pi / 180)) # 将发射角转换为弧度 max_range = int(((v0**2) / g) * (math.sin(2 * launch_angle))) # 计算x方向射程 x_step = int(max_range / 100) # 取100个采样点计算步长 x_values = [] for value in range(x0, max_range, x_step): x_values.append(value) y_values = [] for x in x_values: y_values.append(((x * math.tan(launch_angle)) - g / (2 * (v0**2) * (math.cos(launch_angle))**2) * x**2) + y0) # 新增返回max_range供绘图使用 return (x_values, y_values, max_range) def projectilemotion(x0: int, y0: int, v0: int, theta: int, g: float): """projectlemotion需要5个用户输入参数,如下所示: 参数: x0: x方向初始位移,单位[m] y0: y方向初始位移,单位[m] v0: 抛射体初始速度,单位[m/s] theta: 抛射角,单位[度] g: 地球或月球的重力加速度,单位[m/s**2] 返回: 根据上述参数定义的条件绘制抛射体轨迹,计算以下输出: xPeak: 达到最大高度yPeak时的x值,单位[m] yPeak: y方向最大位移,单位[m] maxRange: x方向最大位移,单位[m] 抛出: Error: """ pass # 新增max_range作为入参 def plot(x_values, y_values, max_range): plt.plot(x_values, y_values) plt.axis([0, max_range, 0, max(y_values)]) plt.xlabel('射程 [m]') plt.ylabel('高度 [m]') plt.show() if __name__ == '__main__': # 接收轨迹计算的返回值,调用绘图 x_vals, y_vals, max_r = trajectory(0, 0, 940, 45, 9.81) plot(x_vals, y_vals, max_r)
补充说明
空的projectilemotion函数目前不影响运行,后续开发GUI功能时可以在该函数内补充参数接收、逻辑调用的相关代码即可。
内容的提问来源于stack exchange,提问作者Ash Fletcher
相关产品推荐
相关产品推荐

