我尝试使用Euler方法调制对象的轨迹。当我输入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度时的结果:
答案 0 :(得分:0)
现在似乎工作了,我忘了添加F = mg:
ax=(Fx-r*vx)/m
ay=(Fy-r*vy-m*g)/m # g=9.8