我正在编写一些允许用户输入2个变量的代码,然后该程序应该能够根据变量绘制射弹的路径。
我在Python中这样做,使用matplotlib.pyplot作为绘制图形的方法。这是代码:
import math
import matplotlib.pyplot as plt
#Do Maths and stuff
g = 9.81 #Gravitational Constant
r = int(input("Enter angle of Projectile's launch:: "))
u = int(input("Enter intial velocity of projectile: "))
x = 0
while x <= 90:
y = x * math.tan(r) - (g*(x*x)) / (2*(u*u)*(math.cos(r)*math.cos(r))
plt.plot(x,y)
plt.show()
但是当我运行它时,它会说
plt.plot(x,y)
语法无效。有人知道为什么吗?
谢谢
答案 0 :(得分:3)
除了lbellomo提到的内容之外,您在y
定义的末尾缺少一个括号。更重要的是,您永远不会在循环中更改x
的值,因此while
循环不会停止。
查看以下代码;我认为收集数据然后绘制它们是一种更好的做法。
import math
import matplotlib.pyplot as plt
#Do Maths and stuff
g = 9.81 #Gravitational Constant
r = int(input("Enter angle of Projectile's launch: "))
u = int(input("Enter intial velocity of projectile: "))
x = 0
xdata=[]
ydata=[]
while x <= 10:
y = x * math.tan(r) - (g/2)*(x/(u*math.cos(r)))**2
xdata.append(x)
ydata.append(y)
x+=1
plt.plot(xdata,ydata,'-ok')
plt.show()
这是速度和角度分别为2
和45
时的图片:
建议:告诉人们角度和速度的单位是什么(物理的东西!)。
最后的想法:我强烈建议您使用numpy
并定义一个功能:
import numpy as np
import matplotlib.pyplot as plt
def projectile(x,v,t):
"""
x: x values (m)
v: initial speed (m/s)
t: launch angle (radian)
"""
g=9.8 #Gravitational Constant
y=x * np.tan(t) - (g/2)*(x/(v*np.cos(t)))**2
return y
r = int(input("Enter angle of Projectile's launch: "))
u = int(input("Enter intial velocity of projectile: "))
xdata = np.linspace(0,10,10)
ydata = projectile(xdata,u,r)
plt.plot(xdata,ydata,'-ok')
plt.show()
答案 1 :(得分:1)
你有3个空格而不是4个空格。
正确缩进:
var url = "http://localhost/AcumaticaDB2562/?ScreenId=AC302000&OpenSourceName=Bills+and+Adjustments&DataID=" + apinvoice.RefNbr;
throw new PXRedirectToUrlException(url, "Open Source")
{
Mode = PXBaseRedirectException.WindowMode.NewWindow
};
请记住,在python中,缩进非常很重要。
一些建议:
不要改变x的值,它永远不会离开。
当然,您希望暂时取出while x <= 90:
y = x * math.tan(r) - (g*(x*x)) / (2*(u*u)*(math.cos(r)*math.cos(r))
plt.plot(x,y)
plt.show()
,将所有要点汇总在一起。