Добавьте сопротивление воздуха движению снаряда

Мне дали начальное положение x и y и начальную скорость, и меня попросили построить график траектории с интервалом в 1 секунду.

Это то, что у меня есть до сих пор:

Если Икс 0 "=" 1 , в 0 Икс "=" 70 , у 0 "=" 0 , в 0 у "=" 80 , а Икс "=" 0 , а у "=" 9,8 , а время будет 0,1,2,3... и так далее.

Используя эти уравнения каждую секунду, вы можете найти, что график будет иметь форму колокола с самой высокой точкой ~ 325 м примерно через 600 секунд:

Икс "=" Икс 0 + ( в 0 Икс ) т + 1 / 2 ( ( а Икс ) т 2 )
у "=" у 0 + ( в 0 у ) т + 1 / 2 ( ( а у ) т 2 )

Обычно в физике нас учат в идеальном состоянии без сопротивления воздуха. А если бы было сопротивление воздуха? Как это повлияет на эту проблему? Как я могу добавить это в свои расчеты и посмотреть, в чем разница?

При перетаскивании v ^ 2 решения в закрытой форме не существует. Я разместил (x, y) выражения для линейного сопротивления по какому-то предыдущему вопросу. Если вам нужна реалистичная модель, альтернативы численному интегрированию не так много. Поиск максимальной высоты также будет итеративным.
Вероятно, следует добавить, что если есть сопротивление воздуха, то есть не только лобовое сопротивление, но и подъемная сила, и отклонение вбок, если снаряд вращается. Прежде чем вы это узнаете, вы будете воспроизводить сто лет работы над реалистичными баллистическими уравнениями.
Начальная вертикальная скорость 80 м / с и ускорение свободного падения = 9,8 м / с 2 подразумевает, что вы достигнете максимальной высоты чуть более чем через 8 секунд. Не знаете, откуда взялись ваши 600 секунд? Исправьте это, прежде чем беспокоиться о перетаскивании...
Сопротивление воздуха зависит от площади поперечного сечения и в е л о с я т у 2 . Таким образом, вам нужно будет либо интегрировать формулу и пересчитать ее, либо разделить свое время на более мелкие участки и рассчитать новую скорость для каждой точки.
Какой инструмент у вас есть, чтобы ответить на этот вопрос? У вас есть excel, mathematica, maple или какая-то другая среда программирования? Делать это вручную (как в старой школе) довольно утомительно. Просто спросите отдел математики армии Второй мировой войны, который занимался этим весь день.

Ответы (1)

С силой сопротивления α | р ˙ | р ˙ и гравитационная сила м г у ^ , уравнения движения (см. мой ответ на этот вопрос )

Икс ¨ "=" β Икс ˙ Икс ˙ 2 + у ˙ 2 у ¨ "=" г β у ˙ Икс ˙ 2 + у ˙ 2
где β "=" α / м , α "=" р С г А / 2 , р это плотность воздуха, С г - коэффициент лобового сопротивления, а А - площадь поперечного сечения снаряда.

Я никогда не видел, чтобы приведенные выше уравнения решались аналитически. Вот некоторый код 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()
Я думаю, что ОП не знает, как смоделировать приведенные выше уравнения (даже с помощью самого простого метода Эйлера), и поэтому, возможно, вы можете добавить ссылку на этот шаг в свой ответ, чтобы указать ему/ей правильное направление.
Сегодня я попытаюсь обновить свой ответ с помощью скрипта Python для решения уравнений движения.