我试图使用主要功能,以使射弹的轨迹具有空气阻力。问题是,当我使用main函数时,我得到了一个错误,但是当我使用没有main的函数时,我做错了什么?
v=float(input("initial velocity: "))
theta=float(input("Angle from the horizontal of initial velocity: "))
B=float(input("normalised drag coefficient: "))
t=float(input("the step interval in seconds: " ))
vx = v * math.cos(theta*math.pi/180.0)
print(str(vx))
vy = v * math.sin(theta*math.pi/180.0)
sx = 0
sy = 0
t0 = 0
ax = 0
ay = 0
g= 9.81
def AX(ax):
ax= -B*v*vx
return ax
def AY(ay):
ay= -(B*v*vy)-g
return ay
def VX(vx):
vx=vx+ax*t
return vx
def VY(vy):
vy=vy+ay*t
return vy
def SX(sx):
sx= sx + vx*t
return sx
def SY(sy):
sy= sy + vy*t
return sy
Xdisplacement=[]
Ydisplacement=[]
def main():
while sy>=0 :
Xdisplacement.append(float(sx))
Ydisplacement.append(float(sy))
sx=SX(sx)
sy=SY(sy)
ax=AX(ax)
ay=AY(ay)
vx=VX(vx)
vy=VY(vy)
v= ((vx**2.0)+(vy**2.0))**(1.0/2.0)
plt.plot(Xdisplacement,Ydisplacement)
plt.title("trajectory")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
main()
答案 0 :(得分:0)
如果您坚持使用全局变量并且不想将它们显式发送到函数,则必须将它们明确地定义为全局变量:
def main():
global sy,sx,ax,ay,vx,vy
然后其余的。您可能已经看到了对全局变量的读取操作不必要的答案(如在您的while sy >= 0
中),但如果您在函数内的任何位置分配变量,python将假定该变量是本地变量,您可以这样做。因此,作为局部变量,它不是在开始时定义的。