Мне дали начальное положение x и y и начальную скорость, и меня попросили построить график траектории с интервалом в 1 секунду.
Это то, что у меня есть до сих пор:
Если , а время будет 0,1,2,3... и так далее.
Используя эти уравнения каждую секунду, вы можете найти, что график будет иметь форму колокола с самой высокой точкой ~ 325 м примерно через 600 секунд:
Обычно в физике нас учат в идеальном состоянии без сопротивления воздуха. А если бы было сопротивление воздуха? Как это повлияет на эту проблему? Как я могу добавить это в свои расчеты и посмотреть, в чем разница?
С силой сопротивления и гравитационная сила , уравнения движения (см. мой ответ на этот вопрос )
Я никогда не видел, чтобы приведенные выше уравнения решались аналитически. Вот некоторый код Python, который отображает решение с сопротивлением воздуха и без него. Для запуска скопируйте в текстовый файл myFile.py и запустите
python myFile.py
из командной строки.
from pylab import *
import math
# Physical constants
g = 9.8
m = 1.0
rho = 1.0
Cd = 1.0
A = math.pi * pow(0.01,2.0)
alpha = rho * Cd * A / 2.0
beta = alpha / m
# Initial conditions
X0 = 1.0
Y0 = 0.0
Vx0 = 70.0
Vy0 = 80.0
# Time steps
steps = 1000
t_HIT = 2.0*Vy0/g
dt = t_HIT / steps
# No drag
X_ND = list()
Y_ND = list()
for i in xrange(steps+1):
X_ND.append(X0 + Vx0 * dt * i)
Y_ND.append(Y0 + Vy0 * dt * i - 0.5 * g * pow(dt * i,2.0))
# With drag
X_WD = list()
Y_WD = list()
Vx_WD = list()
Vy_WD = list()
for i in xrange(steps+1):
X_ND.append(X0 + Vx0 * dt * i)
Y_ND.append(Y0 + Vy0 * dt * i - 0.5 * g * pow(dt * i,2.0))
# With drag
X_WD = list()
Y_WD = list()
Vx_WD = list()
Vy_WD = list()
X_WD.append(X0)
Y_WD.append(Y0)
Vx_WD.append(Vx0)
Vy_WD.append(Vy0)
stop = 0
for i in range(1,steps+1):
if stop != 1:
speed = pow(pow(Vx_WD[i-1],2.0)+pow(Vy_WD[i-1],2.0),0.5)
# First calculate velocity
Vx_WD.append(Vx_WD[i-1] * (1.0 - beta * speed * dt))
Vy_WD.append(Vy_WD[i-1] + ( - g - beta * Vy_WD[i-1] * speed) * dt)
# Now calculate position
X_WD.append(X_WD[i-1] + Vx_WD[i-1] * dt)
Y_WD.append(Y_WD[i-1] + Vy_WD[i-1] * dt)
# Stop if hits ground
if Y_WD[i] <= 0.0:
stop = 1
# Plot results
plot(X_ND, Y_ND)
plot(X_WD, Y_WD)
show()
Алан Роминджер
Qмеханик
CuriousOne
Флорис
НРС3
Джон Алексиу