¡ El siguiente comentario es realmente intrigante!
Yo diría: "Sí, las ecuaciones para pasar de anomalía media a anomalía excéntrica a anomalía verdadera son de hecho diferentes para las órbitas hiperbólicas que para las elípticas, si eso es parte de su proceso". Las mayores diferencias son el cambio de signo en algunos de los términos y el uso de funciones trigonométricas hiperbólicas en lugar de funciones trigonométricas circulares.
Pregunta: ¿Se utilizan funciones trigonométricas hiperbólicas para calcular órbitas hiperbólicas? ¿Si es así, cómo?
Actualización: acabo de encontrar esta respuesta que escribí hace un tiempo, que fue provocada por esta respuesta
Las ecuaciones para la posición en una trayectoria hiperbólica contienen el seno, el coseno y la tangente hiperbólicos.
Una hipérbola se define por la ecuación:
Se puede describir mediante varias ecuaciones paramétricas:
Usando las funciones hiperbólicas de seno y coseno, (1), grafique cian:
Usando la función exponencial compleja, (2), trace magenta:
Resolviendo la definición para x, (3), traza azul:
Resolviendo la definición para y, (4), trazar verde:
Usando coseno y tangente, (5), traza amarillo:
Usando una ecuación paramétrica racional, (6), trace en rojo:
Usando seno y coseno con argumentos complejos, (7), traza gris:
No encontré documentación sobre argumentos complejos para las funciones Python Numpy sin y cos, pero simplemente funciona perfectamente.
La ecuación (7) es similar a:
import matplotlib.pyplot as plt
import numpy as np
import math as math
#
def check(x,y,a,b,eps):
a2 = np.square(a)
b2 = np.square(b)
res = np.square(x)/a2 - np.square(y)/b2
test = True
lowlim = 1.0-eps
highlim = 1.0+eps
for i in range(len(res)):
if res[i] < lowlim or res[i] > highlim : test = False
return test
#
omega = np.pi*0.5
steps = 15
#
# 1: using hyperbolic sine and cosine, plot cyan
a = 1.0
b = 1.0
eps = 1E-13
t1 = np.linspace(-omega, omega, steps)
x1 = a*np.cosh(t1)
y1 = b*np.sinh(t1)
plt.plot(x1, y1, color='c', marker="x")
print('cosh sinh check ', check(x1, y1, a, b, eps))
#
# 2: using complex exponential function, plot magenta
a = 1.2
c = (a + b*1j)*0.5
ck = (a - b*1j)*0.5
z2 = c*np.exp(t1) + ck*np.exp(-t1)
plt.plot(np.real(z2), np.imag(z2), color='m', marker="x")
print('complex exp check ', check(np.real(z2), np.imag(z2), a, b, eps))
#
# 3: solving equation for x, plot blue
ymin = min(y1)
ymax = max(y1)
a = 1.4
a2 = np.square(a)
b2 = np.square(b)
y3 = np.linspace(ymin, ymax, steps)
x3 = a*np.sqrt(np.square(y3)/b2 + 1.0)
plt.plot(x3, y3, color='b', marker="x")
print('normal form y check ', check(x3, y3, a, b, eps))
# 4: solving equation for y, plot green
a = 1.6
a2 = np.square(a)
xmin = a
xmax = a*np.sqrt(np.square(ymax)/b2 + 1.0)
x4 = np.linspace(xmin, xmax, steps//2)
y4 = b*np.sqrt(np.square(x4)/a2 - 1.0)
x4 = np.concatenate((np.flip(x4, 0), x4), axis=None)
y4 = np.concatenate((np.flip(-y4, 0), y4), axis=None)
plt.plot(x4, y4, color='g', marker="x")
print('normal form x check ', check(x4, y4, a, b, eps))
# 5: using cosine and tangent functions, plot yellow
a = 1.8
tmax = np.arctan(ymax/b)
t5 = np.linspace(-tmax, tmax, steps)
x5 = a/np.cos(t5)
y5 = b*np.tan(t5)
plt.plot(x5, y5, color='y', marker="x")
print('cos tan check ', check(x5, y5, a, b, eps))
# 6: using parametric equation, plot red
a = 2.0
tmin = ymax/b + np.sqrt(np.square(ymax/b) + 1.0)
#t6 = np.geomspace(tmin, 1.0, steps//2)
t6 = np.linspace(tmin, 1.0, steps//2)
x6 = a*(np.square(t6) + 1.0)/(2.0*t6)
xmax = max(x6)
y6 = b*(np.square(t6) - 1.0)/(2.0*t6)
x6 = np.concatenate((x6, np.flip(x6, 0)), axis=None)
y6 = np.concatenate((y6, np.flip(-y6, 0)), axis=None)
plt.plot(x6, y6, color='r', marker="x")
print('t square check ', check(x6, y6, a, b, eps))
# 7: using sine and cosine with complex arguments, plot grey
a = 2.2
t7 = np.linspace(-omega*1j, omega*1j, steps)
z7 = a*np.cos(t7) + b*np.sin(t7)
plt.plot(np.real(z7), np.imag(z7), color='grey', marker="x")
print('cos sin check ', check(np.real(z7), np.imag(z7), a, b, eps))
plt.grid(b=None, which='both', axis='both')
plt.axis('scaled')
plt.xlim(0.0, math.ceil(xmax+0.5))
plt.ylim(math.floor(ymin), math.ceil(ymax))
plt.show()
Pablo
lanza
UH oh
Pablo
UH oh