5
$\begingroup$

enter image description here

I have no idea what this is and have been searching on the net but all I get is eccentric anomaly. The equation that relates hyperbolic eccentric anomaly F to its true anomaly $\theta$ is exactly the same as that between eccentric anomaly E and its true anomaly. I am guessing it is probably the hyperbolic version of the ellipse.

$\endgroup$
  • $\begingroup$ A question about the definition of eccentric anomaly for hyperbolic Keplerian orbits is most certainly on-topic here. I think the unexplained close vote for off-topic is both eccentric, and an anomaly! $\endgroup$ – uhoh Jun 3 '18 at 12:01
3
$\begingroup$

Hyperbolic anomaly is the hyperbolic equivalent of eccentric anomaly.

As you mentioned in a comment above, eccentric anomaly is the angle from the central body to the auxiliary circle of the orbit. Because a hyperbolic orbit does not have an auxiliary circle, we need a different formulation.

For hyperbolic anomaly, we use an equilateral hyperbola, which has an eccentricity of $\sqrt2$.

The tricky bit with hyperbolic anomaly is that instead of an angle, it is defined as an area.

$ F = 2*Area / a^2 $

Where $Area$ is defined as the area between the X axis, the equilateral hyperbola from periapsis until the vertical projection of the spacecraft location, and the line between this projection point and the origin.

In your image, this is the shaded area.

It's a non-intuative parameter that doesn't really have a physical meaning that anyone uses. Primarily, it is just used as a mathematical quantity.

$\endgroup$
1
$\begingroup$

The equation that relates hyperbolic eccentric anomaly F to its true anomaly θ is exactly the same as that between eccentric anomaly E and its true anomaly.

It looks like they are not the same.

From this handy table I've reconstructed the following equation sets. $E$, $D$, and $F$ are the eccentric anomalies for elliptical (and circular), parabolic, and hyperbolic Keplerian orbits.

The source of that table is in turn:

Reference: "Fundamentals of Astrodynamics" by R.R.Bate, D.D.Mueller, and J.E. White, Dover Publications (1971)

You might be able to find pdf versions online, or better yet, physical versions in a library.

note: I have borrowed much of this from this answer.


Ellipse, Circle $(0 \le \epsilon < 1)$:

$$\tan \frac E2 = \sqrt{\frac{1-e}{1+e}} \tan\frac\theta2$$ $$\text{or}$$ $$\cos E = \frac{e+\cos\theta}{1+e\cos\theta} \tan\frac\theta2,$$ $$M = E - e\sin E,$$ $$\Delta M = M_2 - M_1,$$ $$\Delta t = \sqrt{\frac{a^3}{\mu}} \Delta M,$$

Hyperbola ($\epsilon > 1)$:

$$\tanh \frac F2 = \sqrt{\frac{e-1}{e+1}} \tan\frac\theta2$$ $$\text{or}$$ $$\cosh F = \frac{e+\cos\theta}{1+e\cos\theta} \tan\frac\theta2,$$ $$M = e\sinh F-F,$$ $$\Delta M = M_2 - M_1,$$ $$\Delta t = \sqrt{\frac{(-a)^3}{\mu}} \Delta M,$$

Parabola ($\epsilon = 1)$:

$$D = \tan\frac\theta2,$$ $$M = D + \frac{D^3}{3},$$ $$\Delta M = M_2 - M_1,$$ $$\Delta t = \sqrt{\frac{q^3}{\mu}} \Delta M,$$


To get the semi-major axis $a$ or to get $q$, use the following (don't worry that $a$ is negative for the hyperbola):

Ellipse, Hyperbola:

$$a=\frac{r_{peri}}{1-e}$$

Ellipse:

$$a=\frac{r_{peri}+r_{apo}}{2}$$

Circle:

$$a=r$$

Parabola:

$$q=r_{peri}$$

A quick check with $\mu=1$ and $r_{peri}=1$:

 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

If you want to try it in 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
$\endgroup$
  • $\begingroup$ Thanks for the help! However I have no idea what is this hyperbolic eccentric anomaly F. For the eccentric anomaly E, it is the angle from the center to the Auxiliary circle. But what about F? F is not visually represented on the diagram and thats why I am really confused $\endgroup$ – newbie125 Jun 5 '18 at 11:49
  • $\begingroup$ @newbie125 oh I see, you'd really like a geometrical explanation or really an illustration. Hmm... I don't know beyond how it's used mathematically, but I will try to find out for you. Thanks for your comment. $\endgroup$ – uhoh Jun 5 '18 at 11:55
  • $\begingroup$ @newbie125 I see there is a new and much better answer to your question! $\endgroup$ – uhoh Jun 14 '18 at 5:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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