Agregar resistencia del aire al movimiento de proyectiles

Me dan una posición inicial de x e y y una velocidad inicial y me piden que grafique la trayectoria en intervalos de 1 segundo.

Esto es lo que tengo hasta ahora:

Si X 0 = 1 , v 0 X = 70 , y 0 = 0 , v 0 y = 80 , a X = 0 , a y = 9.8 , y el tiempo será 0,1,2,3... y así sucesivamente.

Usando estas ecuaciones en cada segundo, puede encontrar que la gráfica tendrá forma de campana con el punto más alto ~ 325 m a aproximadamente 600 segundos:

X = X 0 + ( v 0 X ) t + 1 / 2 ( ( a X ) t 2 )
y = y 0 + ( v 0 y ) t + 1 / 2 ( ( a y ) t 2 )

Por lo general, en física, se nos enseña en perfectas condiciones sin resistencia del aire. Pero, ¿y si hubiera resistencia del aire? ¿Cómo afectaría este problema? ¿Cómo puedo agregarlo a mis cálculos y ver cuál es la diferencia?

Con arrastre v^2, no hay una solución de forma cerrada. Publiqué expresiones (x, y) para arrastre lineal en alguna pregunta anterior. Si desea un modelo realista, no hay muchas alternativas a la integración numérica. Encontrar la altitud máxima también será iterativo.
Probablemente se debería agregar que si hay resistencia del aire, entonces no solo hay arrastre, sino también sustentación y desviación lateral si el proyectil está girando. Antes de que se dé cuenta, estará replicando cien años de trabajo en ecuaciones balísticas realistas.
Velocidad vertical inicial de 80 metro / s y aceleración de la gravedad = 9.8 metro / s 2 implica que alcanzará una altura máxima después de un poco más de 8 segundos. ¿No estás seguro de dónde vienen tus 600 segundos? Arregla eso antes de preocuparte por arrastrar...
La resistencia del aire es una función del área de la sección transversal y v mi yo o C i t y 2 . Entonces, deberá integrar la fórmula y volver a calcularla, o dividir su tiempo en secciones más pequeñas y calcular una nueva velocidad para cada punto.
¿Qué herramienta tienes para responder a esta pregunta? ¿Tiene Excel, Mathematica o Maple, o algún otro entorno de programación? Hacer esto a mano (como en la vieja escuela) es bastante tedioso. Solo pregúntele al departamento de matemáticas del ejército de la Segunda Guerra Mundial que hizo esto todo el día.

Respuestas (1)

Con fuerza de arrastre α | r ˙ | r ˙ y fuerza gravitatoria metro gramo y ^ , las ecuaciones de movimiento son (ver mi respuesta a esta pregunta )

X ¨ = β X ˙ X ˙ 2 + y ˙ 2 y ¨ = gramo β y ˙ X ˙ 2 + y ˙ 2
dónde β = α / metro , α = ρ C d A / 2 , ρ es la densidad del aire, C d es el coeficiente de arrastre, y A es el área de la sección transversal del proyectil.

Nunca he visto las ecuaciones anteriores resueltas analíticamente. Aquí hay un código de Python que traza la solución con y sin resistencia del aire. Para ejecutar, copie en un archivo de texto myFile.py y ejecute

python myFile.py

desde la línea de comandos.

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()
Creo que el OP no sabe cómo simular las ecuaciones anteriores (incluso con el método de Euler más básico), por lo que tal vez pueda agregar una referencia a este paso en su respuesta para orientarlo en la dirección correcta.
Intentaré actualizar mi respuesta en algún momento de hoy con un script de Python para resolver las ecuaciones de movimiento.