3
$\begingroup$

The following comment is really intriguing!

I would say, "Yes, The equations for going from Mean Anomaly to Eccentric Anomaly to True Anomaly are indeed different for hyperbolic orbits than for elliptical ones, if that's part of your process." The biggest differences are sign-flipping on some of the terms, and the use of hyperbolic trigonometric functions rather than the circular trig functions.

Question: Are hyperbolic trigonometric functions used in calculating hyperbolic orbits? If so, how?

Update: I just found this answer that I wrote a while ago, which was triggered by this answer

$\endgroup$
5
  • 3
    $\begingroup$ The only time i’ve ever used the inverse hyperbolic tangent was in orbital mechanics computation. $\endgroup$
    – Paul
    Mar 4, 2020 at 13:44
  • $\begingroup$ @Paul Can you share any more details or provide a link? Should all trig functions be switched to hyperbolic for calculating all of the orbital elements? How about when transforming to cartesian coordinates, should the hyperbolic trig functions be used then too? $\endgroup$
    – lancew
    Mar 4, 2020 at 14:04
  • $\begingroup$ @lancew it's okay to link one question to another, but we should keep comments on a given question limited to the question itself, not another question, otherwise everything gets confusing. Also comments are for clarifying the question at hand, not raising new questions. $\endgroup$
    – uhoh
    Mar 4, 2020 at 14:12
  • 2
    $\begingroup$ The relationship between eccentric and true anomalies involves hyperbolic tangent. The equation for mean anomaly involves hyperbolic sine. $\endgroup$
    – Paul
    Mar 4, 2020 at 14:49
  • 1
    $\begingroup$ @Paul is that specifically for hyperbolic orbits, or is it true for all conics? $\endgroup$
    – uhoh
    Mar 4, 2020 at 14:51

1 Answer 1

6
$\begingroup$

The equations for the position in a hyperbolic trajectory contain the hyperbolic sine, cosine and tangent.

A hyperbola is defined by the equation:

$$\frac{x^2}{a^2} - \frac{y^2}{b^2} = 1$$

It can be described by several parametric equations:

Using the hyperbolic sine and cosine functions, (1), plot cyan: $$ \boxed{x = \pm a \cosh(t) \\y = b \sinh(t) \\ t\in\mathbb{R} }$$

Using the complex exponential function, (2), plot magenta: $$ \boxed{z = c e^t + \overline{c} e^{-t} \\ c = \frac{a + i b}{2} \\ \overline{c} = \frac{a - i b}{2} \\ t\in\mathbb{R} }$$

Solving the definition for x, (3), plot blue: $$ \boxed{x = a \sqrt{\frac{y^2}{b^2} + 1} \\ y\in\mathbb{R} }$$

Solving the definition for y, (4), plot green: $$ \boxed{y = b \sqrt{\frac{x^2}{a^2} - 1} \\ x \geq a , x \leq -a }$$

Using cosine and tangent, (5), plot yellow: $$ \boxed{x = \frac{a} {\cos(t)} = a \sec(t) \\y = b \tan(t) \\ 0 \leq t \leq 2\pi \\ t \neq \frac{\pi}{2} , t \neq \frac{3\pi}{2} }$$

Using a rational parametric equation, (6), plot red: $$ \boxed{x = \pm a \frac{t^2 + 1}{2t} \\y = b \frac{t^2 - 1}{2t} \\ t\in\mathbb{R}, t > 0 }$$

Using sine and cosine with complex arguments, (7), plot grey: $$ \boxed{z = a \cos(it) + b \sin(it) \\ t\in\mathbb{R} }$$

I found no documentation about complex arguments for the Python Numpy sin and cos functions but it simply works perfect.

The equation (7) looks similar to: $$ \boxed{z = a \cos(t) + ib \sin(t) \\ 0 \leq t \leq 2\pi }$$ used to calculate an ellipse or circle.

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()

enter image description here

$\endgroup$
5
  • $\begingroup$ I just added an update to my question with a link $\endgroup$
    – uhoh
    Mar 4, 2020 at 15:10
  • $\begingroup$ Think you’ll still be able to add the Python examples some time? $\endgroup$
    – lancew
    Mar 6, 2020 at 15:50
  • $\begingroup$ Any progress on examples? If you can just type a few equations in MathJax here rather than just having a link, that might be good enough. Here are some examples that might be sufficient. $\endgroup$
    – uhoh
    Apr 11, 2020 at 4:02
  • $\begingroup$ @Uwe Any chance you're still intending on doing those Python examples? $\endgroup$
    – lancew
    Apr 12, 2020 at 1:29
  • $\begingroup$ This looks great already, thank you! (any text that begins with at least four spaces will show as a code block with equal spaced font. (examples: 1, 2)) $\endgroup$
    – uhoh
    Apr 12, 2020 at 23:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.