如何使用读取的x、y位置数据在Python中绘制弹跳球运动轨迹?
问题原因
- 直接报错的根源是计算θ的代码行括号不匹配:
你代码中的θ.append(float(math.tan(y[i] / x[i])行一共使用了3个左括号(分别对应append、float、math.tan三个函数的参数起始),但仅写了1个右括号,缺少2个闭合的右括号,导致Python解析器无法正确识别代码边界,会把后续的plt.plot行当成上一行未结束的内容处理,所以才会在plt.plot行提示语法错误,属于典型的括号不匹配导致的报错行号滞后问题。 - 额外逻辑问题:如果你要计算的是坐标点对应的仰角,不应该用
math.tan(y[i]/x[i]),一是会遇到x=0时的除零报错,二是无法正确识别不同象限的角度,应该用math.atan2(y[i], x[i])直接传入y、x值计算弧度角。
修复方法
把计算θ的循环行补充闭合括号,按需替换角度计算函数即可,参考修正后的完整代码:
import matplotlib.pyplot as plt import math filename = 'NewTrackerVid_.txt' # 用with语句读取文件无需手动关闭,更安全 with open(filename, 'r') as infile: line = infile.readline() # 跳过首行 t = [] x = [] y = [] for line in infile: words = line.split() t.append(float(words[0])) x.append(float(words[1])) y.append(float(words[2])) θ = [] for i in range(len(x)): # 补充2个右括号,替换为atan2计算角度 θ.append(math.atan2(y[i], x[i])) plt.plot(t, θ) plt.xlabel('t') plt.ylabel('θ') plt.title("Trajectory vs Time") plt.show()
内容的提问来源于stack exchange,提问作者User1234
相关产品推荐
相关产品推荐

