Estoy codificando en un simulador espacial y quiero dibujar una órbita predecible para un satélite. He leído sobre órbitas en http://www.braeunig.us/space/ y en la sección " Lanzamiento de un vehículo espacial " describen cómo puedo obtener los elementos orbitales como excentricidad, anomalía verdadera, etc. dado que tienes la vector de posición, vector de velocidad y el ángulo cenital entre ellos.
Tengo dos preguntas que necesito entender:
Respuesta parcial:
¡Lo que Braeunig llama gamma o ángulo cenital es en realidad beta!
Según la respuesta de @TomSpilker
Este es un problema que ha afectado a grupos de personas muy conocedoras de la dinámica orbital pero que aprendieron usando diferentes libros de texto: ¡ hay dos definiciones diferentes de "ángulo de trayectoria de vuelo"!
Además de , el ángulo entre la dirección tangencial y el vector velocidad, hay , el ángulo entre la dirección radial y el vector velocidad. La gente a menudo dice "ángulo de trayectoria de vuelo" sin decir qué definición están usando . ¡Confuso! (Acabo de notar que el diagrama en la respuesta de Julio también muestra )
si trabajas con en lugar de , es dado por
Así que la gamma de Braeunig es la beta de la NASA. Es positivo de peri a apo y negativo de apo a peri. Como no soy lo suficientemente inteligente para hacerlo con matemáticas, lo haré con Python.
Estoy haciendo esto en unidades adimensionales, por lo que el período es 2π y el semieje mayor es la unidad. Puede ver el comportamiento de beta en una órbita, movimiento positivo hacia la apoapsis y luego movimiento negativo hacia el 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()
número de usuario
Pedro