Ich codiere auf einem Weltraumsimulator und möchte eine vorhersehbare Umlaufbahn für einen Satelliten zeichnen. Ich habe auf http://www.braeunig.us/space/ über Umlaufbahnen gelesen und unter dem Abschnitt „ Start eines Raumfahrzeugs “ wird beschrieben, wie ich die Umlaufbahnelemente wie Exzentrizität, wahre Anomalie usw. erhalten kann, vorausgesetzt, Sie haben die Positionsvektor, Geschwindigkeitsvektor und der Zenitwinkel dazwischen.
Ich habe zwei Fragen, die ich verstehen muss:
Teilantwort:
Was Bräunig Gamma oder Zenitwinkel nennt, ist eigentlich Beta!
Laut der Antwort von @TomSpilker
Dies ist ein Problem, das Gruppen von Menschen geplagt hat, die sich mit Orbitaldynamik sehr gut auskennen, aber aus verschiedenen Lehrbüchern gelernt haben: Es gibt zwei verschiedene Definitionen von "Flugbahnwinkel"!!
Zusätzlich zu , dem Winkel zwischen der Tangentialrichtung und dem Geschwindigkeitsvektor, besteht , dem Winkel zwischen der radialen Richtung und dem Geschwindigkeitsvektor. Die Leute sagen oft "Flugbahnwinkel", ohne zu sagen, welche Definition sie verwenden . Verwirrend! (Mir ist gerade aufgefallen, dass das Diagramm in Julios Antwort auch zeigt )
Wenn Sie mit arbeiten anstatt , wird von gegeben
Bräunigs Gamma ist also NASAs Beta. Es ist positiv von Peri zu Apo und negativ von Apo zu Peri. Weil ich nicht schlau genug bin, es mit Mathe zu machen, mache ich es mit Python.
Ich mache das in dimensionslosen Einheiten, also ist die Periode 2π und die große Halbachse ist Eins. Sie können das Verhalten von Beta über einen Orbit sehen, positive Bewegung in Richtung Apoapsis, dann negative Bewegung in Richtung Periapsis.
def deriv (X, t):
x, v = X.reshape(2, -1)
acc = -x * ((x**2).sum())**-1.5
return np.hstack((v, acc))
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint
halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180
time = np.linspace(0, twopi, 361)
r0 = 1.8
v0 = np.sqrt(2./r0 - 1) # vis-viva
X0 = np.hstack([r0, 0, 0, v0])
answer, info = ODEint(deriv, X0, time, full_output=True)
x, v = answer.T.reshape(2, 2, -1)
rn = x/np.sqrt((x**2).sum(axis=0))
vn = v/np.sqrt((v**2).sum(axis=0))
x, y, vx, vy = answer.T
beta = np.arccos((rn*vn).sum(axis=0))
if True:
plt.figure()
plt.plot(x, y)
plt.plot([0], [0], 'ok', markersize=8)
x0, y0 = 0.5*(x.min() + x.max()), 0.5*(y.min() + y.max())
hwx, hwy = (np.abs(x-x0)).max(), (np.abs(y-y0)).max()
hw = 1.05*max(hwx, hwy)
plt.xlim(x0-hw, x0+hw)
plt.ylim(y0-hw, y0+hw)
plt.show()
if True:
plt.figure()
plt.subplot(3, 1, 1)
plt.plot(time, x)
plt.plot(time, y)
plt.plot(time, np.zeros_like(time), '-k')
plt.title('x and y vs time')
plt.subplot(3, 1, 2)
plt.plot(time, vx)
plt.plot(time, vy)
plt.plot(time, np.zeros_like(time), '-k')
plt.title('vx and vy vs time')
plt.subplot(3, 1, 3)
plt.plot(time, beta)
plt.plot(time, halfpi*np.ones_like(time), '-k')
plt.title('beta vs time')
plt.show()
Benutzernummer
Peterh