An orbiting object at distance $r$ and semimajor axis $a$ will move at $\sqrt{2 - \displaystyle \frac{r}{a}}$ times the speed of a circular orbit at $r$, no matter what the eccentricity or which direction it might have!

That comes from the vis-viva equation

$$v = \sqrt{GM \left(\frac{2}{r} - \frac{1}{a} \right)},$$

and if you use AU and years for units, then for orbits only around our Sun it's simply

$$v = 2 \pi \sqrt{\frac{2}{r} - \frac{1}{a}}.$$

If $a$ = 2, it's moving $\sqrt{1.5}$ faster than Earth's $2 \pi$ AU/year, and if it is coming in with $C_3$=0 (heliocentric escape velocity) it's moving $\sqrt{2}$ faster than Earth at 1 AU, which is a handy relationship to remember.

Question: Given $r/a$, what are the limits on the direction that an orbiting body can be going? For example if $r/a = 0.9$ could it be moving in any direction that's say between 80 and 100 degrees with respect to the vector pointing at the Sun?

Possibly an answer could be expressed as solid angle as a function of $r/a$ ranging from 0 to 2, but since I don't know what the answer will look like I won't overly constrain the form.

note: I have not constrained eccentricity, so an answer will (probably?) need to first determine the two limiting eccentricities as a function of $r/a$ and then go from there.


2 Answers 2


There are no limits on the direction.

The Vis-viva equation will give you a speed. Assuming point-masses and sticking to classical mechanics, the Vis-Viva equation does not care at all about what direction you point your velocity in; It's merely an equation based on how the total Orbital Energy (which is the same for all orbits with the same semimajor axis around the same body) must be distributed between Gravitational Potential Energy and Kinetic Energy.

For Keplerian orbits, the only constraints on $r$ and $a$ are:

  • $r$ will be a positive value.
  • $a$ must be nonzero.
  • If $a$ is positive (meaning an elliptical orbit), $r$ will never exceed $2a$ (If $r$ = $2a$, you're looking at the apoapsis of the linear degenerate ellipse)
  • If $a$ is negative (meaning a hyperbolic trajectory), $r$ can be whatever positive value you choose.

To put it another way, by the vis-viva equation, given a radial distance $r$ and a semimajor axis $a$ around a gravitating body defines an orbital speed value $v$. In the ideal two-body Newtonian conditions, regardless of the direction you point that speed $v$, you will always be in a Keplerian Orbit/Trajectory.

  • $\begingroup$ No limits on the direction at all? Can $r/a$ equal 0.5 or 1.5 and the direction be perpendicular to the radial vector $\mathbf{r}$ at the same time for example? I think that for a given $r/a$ there is a one-to-one correspondence between angle and eccentricity. $\endgroup$
    – uhoh
    Commented Dec 9, 2019 at 11:37
  • 2
    $\begingroup$ @uhoh Yes, no limits on the direction. If the the velocity vector is perpendicular to the radial vector $r$, then the orbiting body is either at apoapsis or periapsis for its current orbit, depending respectively on whether $r/a > 1$ or $r/a < 1$. $\endgroup$
    – notovny
    Commented Dec 9, 2019 at 11:47
  • $\begingroup$ Yes indeed! I've added a supplemental answer; for some reason I can't feel comfortable with all directions are possible ($4 \pi$ solid angle) at any $r/a$. I guess there is a one-to-one relationship between angle and eccentricity, but perhaps it's the range of eccentricities that's limited, not the angle. $\endgroup$
    – uhoh
    Commented Dec 9, 2019 at 12:22

Supplemental answer confirming @notovny is correct!

While vis-viva gives you the speed, apparently all directions seem to be still possible!

It seems that I've puzzled myself this time.


import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint

def deriv(X, t):
    x, v = X.reshape(2, -1)
    acc = -x * ((x**2).sum())**-1.5
    return np.hstack((v, acc))

halfpi, pi, twopi   = [f*np.pi for f in (0.5, 1, 2)]
r       = 1.0
answerz = []
titles  = []

for r_over_a in (0.7, 1.4):
    titles.append('r/a = ' + str(round(r_over_a, 2)))
    answers = []
    a     = r / r_over_a
    T     = twopi * np.sqrt(a**3)
    times = np.linspace(0, T, 1001)
    v0    = np.sqrt(2./r - 1./a)

    thetas = np.linspace(0, pi, 8)[:-1] # make the result odd to avoid singularity

    for theta in thetas:
        s, c = [f(theta) for f in (np.sin, np.cos)]
        X0   = np.array([r, 0, s*v0, c*v0])
        answer, info = ODEint(deriv, X0, times, full_output=True)

if True:
    fig = plt.figure()
    for i, (title, answers) in enumerate(zip(titles, answerz)):
        ax  = fig.add_subplot(2, 1, i+1)
        for a in answers:
            x, y = a.T[:2]
            ax.plot(x, y)
        ax.plot([0], [0], 'oy', markersize=12)
        ax.set_title(title, fontsize=16)
  • 1
    $\begingroup$ Nice graphics! Visualisation always helps a lot in understanding. It seems if angle between velocity vector and x axis (directed to the right in your plots) is approaching zero, at some very very small but non zero angle, the ellips shape on its left side would "touch" the physical boundary of the planet; and when the angle is decreased further, the planet boundary would geometrically "protrude outside" the squashed ellips shape, which means that the orbit is not possible due to either aero- or lithobraking. $\endgroup$ Commented Dec 24, 2019 at 1:56
  • 1
    $\begingroup$ @LeoS yep! I avoided that in the simulation (see the comment make the result odd to avoid singularity). The simulation doesn't know about atmospheres, but it would blow up because the "planet" in the simulation is a point source of gravity. Slightly related: What's the eccentricity of an orbit (trajectory) falling straight down towards the center? $\endgroup$
    – uhoh
    Commented Dec 24, 2019 at 2:06

Your Answer

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

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