En una órbita elíptica de Kepler hay una receta fácil para describir el movimiento/posición de un satélite en el tiempo . Uno solo sigue los siguientes pasos - un detalle importante para mi es que la parte numérica siempre tiene el mismo error, el error no aumenta con el tiempo, ni se basa en el timestep. (Lo que sucedería si uno resolviera una ecuación diferencial).
Calcular el movimiento medio (dado un semieje mayor y masa central , esto es básicamente el 2 pi dividido por el período):
Ahora la definición de anomalía media:
Y uno puede (numéricamente) resolver la siguiente ecuación, para obtener la anomalía excéntrica :
Y luego la geometría simple permite encontrar la verdadera anomalía. .
Tampoco tiene significado la anomalía excéntrica, las órbitas no elípticas no tienen centro geométrico. (La verdadera anomalía todavía se definiría como el punto focal).
Para el caso de la órbita hiperbólica, utiliza la función trigonométrica hiperbólica. Entonces su ecuación para la anomalía de la media hiperbólica se convierte en:
dónde es su anomalía excéntrica hiperbólica, que es análoga a la anomalía excéntrica para elipse y todavía está dada por la misma expresión. La medida del ángulo para las identidades trigonométricas hiperbólicas no es la misma sino análoga, por lo que al usar el centro de la hipérbola que existe entre la hipérbola real y su imagen, obtienes el valor de la función sinh. Suponiendo que el objeto está a distancia. desde el foco primario y centro de hipérbola siendo el origen de referencia estará dado por:
dónde es la distancia perpendicular desde el eje focal del objeto en la trayectoria, y es el semieje menor de la cónica.
En cuanto al semieje mayor, se puede obtener mediante la ecuación de la órbita en el periapse para la hipérbola, que es , que es positivo.
Para la órbita parabólica, no define la anomalía media, debido a la ausencia correctamente mencionada del centro geométrico, en su lugar, use la ecuación de Baker dónde es su tiempo de paso periapse y es el tiempo transcurrido desde el periapsis, y es el recto semi-latus que está bien definido para una parábola. Hay soluciones disponibles para esta ecuación que dan la posición del objeto en un momento dado dados algunos parámetros de entrada.
Espero que esto ayude.
A partir de esta respuesta , aquí están las formas de los equivalentes elípticos, parabólicos e hiperbólicos solo para tener todo en un solo lugar. Transcribí de esta práctica tabla y agregué formas alternativas para y de Wikipedia. Hice algunas comprobaciones puntuales con integración numérica solo para asegurarme de que los resultados coincidieran.
Elipse, Círculo :
hipérbola ( :
Parábola( :
Para obtener el eje semi-mayor o para conseguir , use lo siguiente (no se preocupe de que es negativo para la hipérbola):
Elipse, hipérbola:
Elipse:
Círculo:
Parábola:
Una consulta rápida con :
e theta a v_peri E/D/F M t
1.5 90.000000 -2.0 1.581139 55.14281 40.94513 2.021271
1.0 90.000000 n/a 1.414214 57.29578 76.39437 1.885618
0.5 90.000000 2.0 1.224745 60.00000 35.19020 1.737177
0.0 90.000000 1.0 1.000000 90.00000 90.00000 1.570796
Si quieres probarlo en Python:
def deriv(X, t):
x, v = X.reshape(2, -1)
acc = -mu * x * ((x**2).sum())**-1.5
return np.hstack((v, acc))
def get_D(theta, e):
if e == 1.0:
D = np.tan(0.5*theta)
else:
D = np.nan
return D
def get_E(theta, e):
if e < 1.0:
term = np.sqrt((1.-e)/(1.+e)) * np.tan(0.5*theta)
E = 2.*np.arctan(term)
else:
E = np.nan
return E
def get_E_alt(theta, e):
if e < 1.0:
term = (e + np.cos(theta)) / (1. + e*np.cos(theta))
E = np.arccos(term)
else:
E = np.nan
return E
def get_F(theta, e):
if e > 1.0:
term = np.sqrt((e-1.)/(e+1.)) * np.tan(0.5*theta)
F = 2.*np.arctanh(term)
else:
F = np.nan
return F
def get_F_alt(theta, e):
if e > 1.0:
term = (e + np.cos(theta)) / (1. + e*np.cos(theta))
F = np.arccosh(term)
else:
F = np.nan
return F
def get_M_from_E(E, e):
if e < 1.0:
M = E - e*np.sin(E)
else:
M = np.nan
return M
def get_M_from_F(F, e):
if e > 1.0:
M = e*np.sinh(F) - F
else:
M = np.nan
return M
def get_M_from_D(D, e):
if e == 1.0:
M = D + D**3/3.
else:
M = np.nan
return M
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint
# http://www.bogan.ca/orbits/kepler/orbteqtn.html
quarterpi, halfpi, pi, twopi = [f*np.pi for f in [0.25, 0.5, 1, 2]]
rads, degs = pi/180, 180/pi
mu = 1.0
th0, th1 = 0.0, halfpi
print "th0, th1 (degs): ", degs*th0, degs*th1
eccs = [1.5, 1.0, 0.5, 0.0]
for e in eccs:
print "e: ", e
rp = 1.0 # periapsis
if e < 1.0:
print " is ellipse!"
ra = rp * (1+e)/(1-e)
print "rp, ra: ", rp, ra
a0 = 0.5*(rp + ra)
v0 = np.sqrt(mu * (2./rp - 1./a0))
print "a0, v0: ", a0, v0
E0, E1 = [get_E(th, e) for th in [th0, th1]]
M0, M1 = [get_M_from_E(E, e) for E in [E0, E1 ]]
print "E0, E1 (degs): ", degs*E0, degs*E1
print "M0, M1 (degs): ", degs*M0, degs*M1
print "E0, E1: ", E0, E1
print "M0, M1: ", M0, M1
dt = np.sqrt(a0**3/mu) * (M1-M0)
print "dt (sec): ", dt
elif e > 1.0:
print " is hyperbola!"
ra = rp * (1+e)/(1-e)
print "rp, ra: ", rp, ra
a0 = 0.5*(rp + ra)
v0 = np.sqrt(mu * (2./rp - 1./a0))
print "a0, v0: ", a0, v0
F0, F1 = [get_F(th, e) for th in [th0, th1]]
M0, M1 = [get_M_from_F(F, e) for F in [F0, F1 ]]
print "F0, F1 (degs): ", degs*F0, degs*F1
print "M0, M1 (degs): ", degs*M0, degs*M1
print "F0, F1: ", F0, F1
print "M0, M1: ", M0, M1
dt = np.sqrt((-a0)**3/mu) * (M1-M0)
print "dt (sec): ", dt
elif e == 1.0:
print " is parabola!"
print "rp: ", rp
v0 = np.sqrt(mu * (2./rp))
print "v0: ", v0
D0, D1 = [get_D(th, e) for th in [th0, th1]]
M0, M1 = [get_M_from_D(D, e) for D in [D0, D1 ]]
print "D0, D1 (degs): ", degs*D0, degs*D1
print "M0, M1 (degs): ", degs*M0, degs*M1
print "D0, D1: ", D0, D1
print "M0, M1: ", M0, M1
q = rp
dt = np.sqrt(2.*q**3/mu) * (M1-M0)
print "dt (sec): ", dt
time = np.array([0, dt])
X0 = np.array([rp, 0, 0, v0])
answer, info = ODEint(deriv, X0, time, atol=1E-13, rtol=1E-13, full_output=True)
x, y, vx, vy = answer.T
theta = np.arctan2(y, x)
print degs*theta[0], degs*theta[-1], " should be ", degs*th0, degs*th1
pablo rueda
tan(θ/2)
en la ecuacióncosh
de la anomalía excéntrica para una trayectoria hiperbólica. No puedo encontrar una referencia de por qué esto sería correcto y se ve mal cuando se grafica.UH oh
UH oh