我尝试用欧拉方法来调整物体的轨迹。当我输入45度时,我的程序看起来可以正常工作,但是如果输入其他值,它就不起作用了(我不确定它在45度下是否有效,但至少看起来像轨迹)。也许有人能看出我做错了什么,我的代码是:
import numpy as np
import matplotlib.pyplot as plt
dt=0.005 # step
t=0
X=[0]
Y=[0] # X and Y are arrays for storing coordinates
x=0
y=0
v=10 # initial velocity
F=100 # force given to object
m=10 # object's mass
r=1.5 # viscosity
alpha=float(input())
vx=v*np.cos(np.rad2deg(alpha)) # projections to axises
vy=v*np.sin(np.rad2deg(alpha))
Fx=F*np.cos(np.rad2deg(alpha))
Fy=F*np.sin(np.rad2deg(alpha))
while t<20: # Euler method
ax=(Fx-r*vx)/m # F=ma, F=-rv so a=(F-rv)/m
ay=(Fy-r*vy)/m
vx=vx+ax*dt
vy=vy+ay*dt
x=x+vx*dt
y=y+vy*dt
X.append(x)
Y.append(y)
t=t+dt
if y<0:
break
plt.plot(X,Y)
plt.autoscale(enable=True,axis='both',tight=None)
plt.xlabel(X)
plt.ylabel(Y)
plt.show()
以下是我输入45度时得到的结果:
现在好像有用了,我忘了加F=mg:
相关问题 更多 >
编程相关推荐