Fügen Sie der Projektilbewegung Luftwiderstand hinzu

Mir wurden eine anfängliche x- und y-Position und eine anfängliche Geschwindigkeit gegeben, und ich wurde gebeten, die Flugbahn in 1-Sekunden-Intervallen grafisch darzustellen.

Das ist, was ich bisher habe:

Wenn X 0 = 1 , v 0 X = 70 , j 0 = 0 , v 0 j = 80 , A X = 0 , A j = 9.8 , und die Zeit ist 0,1,2,3 ... und so weiter.

Wenn Sie diese Gleichungen für jede Sekunde verwenden, können Sie feststellen, dass das Diagramm glockenförmig ist, wobei der höchste Punkt bei etwa 600 Sekunden ~ 325 m beträgt:

X = X 0 + ( v 0 X ) T + 1 / 2 ( ( A X ) T 2 )
j = j 0 + ( v 0 j ) T + 1 / 2 ( ( A j ) T 2 )

Normalerweise werden wir in der Physik in perfektem Zustand ohne Luftwiderstand unterrichtet. Aber was wäre, wenn es Luftwiderstand gäbe? Wie würde es dieses Problem beeinflussen? Wie kann ich es zu meinen Berechnungen hinzufügen und sehen, was der Unterschied ist?

Bei v^2 Drag gibt es keine Lösung in geschlossener Form. Ich habe (x,y)-Ausdrücke für linearen Widerstand in einer früheren Frage gepostet. Wenn Sie ein realistisches Modell wünschen, gibt es nicht viel Alternative zur numerischen Integration. Das Finden der höchsten Höhe wird ebenfalls iterativ sein.
Man sollte wohl hinzufügen, dass bei Luftwiderstand nicht nur Luftwiderstand, sondern auch Auftrieb und seitliche Ablenkung bei rotierendem Projektil vorhanden sind. Bevor Sie es wissen, werden Sie hundert Jahre Arbeit an realistischen ballistischen Gleichungen replizieren.
Vertikale Anfangsgeschwindigkeit von 80 M / S und Erdbeschleunigung = 9.8 M / S 2 bedeutet, dass Sie nach etwas mehr als 8 Sekunden eine maximale Höhe erreichen. Sie sind sich nicht sicher, woher Ihre 600 Sekunden kommen? Beheben Sie das, bevor Sie sich Gedanken über den Widerstand machen ...
Der Luftwiderstand ist eine Funktion der Querschnittsfläche und v e l Ö C ich T j 2 . Sie müssen also entweder die Formel integrieren und neu berechnen oder Ihre Zeit in kleinere Abschnitte unterteilen und für jeden Punkt eine neue Geschwindigkeit berechnen.
Welches Tool haben Sie, um diese Frage zu beantworten? Haben Sie Excel, Mathematica oder Maple oder eine andere Programmierumgebung? Dies von Hand (wie in der alten Schule) zu tun, ist ziemlich mühsam. Fragen Sie einfach die Mathematikabteilung der Armee des Zweiten Weltkriegs, die dies den ganzen Tag lang getan hat.

Antworten (1)

Mit Schleppkraft a | R ˙ | R ˙ und Gravitationskraft M G j ^ , die Bewegungsgleichungen sind (siehe meine Antwort auf diese Frage )

X ¨ = β X ˙ X ˙ 2 + j ˙ 2 j ¨ = G β j ˙ X ˙ 2 + j ˙ 2
Wo β = a / M , a = ρ C D A / 2 , ρ ist die Luftdichte, C D ist der Luftwiderstandsbeiwert, und A ist die Querschnittsfläche des Geschosses.

Ich habe die obigen Gleichungen noch nie analytisch gelöst gesehen. Hier ist ein Python-Code, der die Lösung mit und ohne Luftwiderstand darstellt. Kopieren Sie zum Ausführen myFile.py in eine Textdatei und führen Sie es aus

python myFile.py

von der Kommandozeile.

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()
Ich denke, das OP weiß nicht, wie es die obigen Gleichungen simulieren soll (selbst mit der einfachsten Euler-Methode). Vielleicht können Sie Ihrer Antwort einen Verweis auf diesen Schritt hinzufügen, um ihn / sie in die richtige Richtung zu lenken.
Ich werde versuchen, meine Antwort heute einige Zeit mit einem Python-Skript zu aktualisieren, um die Bewegungsgleichungen zu lösen.