# 'Geocentric' view of orbits

Given our real solar system how would planet orbits plot look like if we fix earth in the middle (put earth in the middle and draw a real orbit of a given planet) ?

What would be the shape of its orbit? Is there any software that allows you to do such plot ? Does anybody have an example of it ?

I have tried searching for such image but most results are connected with historical theory .

• I comment only, as for it is basically a link. celestia.space this free package should let you hover a fixed Earth and look at the Sun and planetary motion with respect of. – Alchimista Mar 30 at 10:20
• orbitsimulator.com/gsim.html – James K Mar 30 at 22:23

@Ingolifs' answer is exactly right. I'll just add to it some more plotting using the Python package Skyfield.

The "inner" plotted bodies (from outer to inner) are Mars, (Earth), Moon, Venus, Mercury, The Sun. The data is for 2000 days.

The "outer" plotted bodies are Uranus, Saturn, Jupiter, Earth, and The Sun. The data is for 2000 months.

Distances are in AU.

Click the plot to see larger, or just run the Python script and make your own plot.

class Body(object):
def __init__(self, name):
self.name = name

import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Topos, Loader, EarthSatellite

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

AU = 149597870.700  # km

data       = data405   # need the longer time range for the outer planets

things  = ('sun', 'mercury', 'venus', 'earth', 'moon', 'mars',
'jupiter barycenter', 'saturn barycenter', 'uranus barycenter', )

bodies = []
for thing in things:
name = thing.split()[0]
body = Body(name)
bodies.append(body)
body.obj = data[thing]

sun, mercury, venus, earth, moon, mars, jupiter , saturn, uranus = bodies

days_inner = np.arange(2000)
times_inner = ts.utc(2019, 1, days_inner)

months_outer = np.arange(2000)
times_outer = ts.utc(2019, months_outer, 1)

for body in bodies:
body.posn_barycentric_inner = body.obj.at(times_inner).position.km
body.posn_barycentric_outer = body.obj.at(times_outer).position.km
for body in bodies:
body.posn_geocentric_inner = body.posn_barycentric_inner - earth.posn_barycentric_inner
body.posn_geocentric_outer = body.posn_barycentric_outer - earth.posn_barycentric_outer
body.posn_heliocentric_inner = body.posn_barycentric_inner - sun.posn_barycentric_inner
body.posn_heliocentric_outer = body.posn_barycentric_outer - sun.posn_barycentric_outer

print (jupiter.posn_geocentric_inner.shape)

if True:
plt.figure()
lw, fs = 0.7, 12

plt.subplot(2, 2, 1)
plt.title('geocentric inner', fontsize=fs)
for body in (sun, mercury, venus, earth, moon, mars):
x, y, z = body.posn_geocentric_inner / AU
plt.plot(x, y, linewidth=lw)

plt.subplot(2, 2, 3)
plt.title('heliocentric inner', fontsize=fs)
for body in (sun, mercury, venus, earth, moon, mars):
x, y, z = body.posn_heliocentric_inner / AU
plt.plot(x, y, linewidth=lw)

plt.subplot(2, 2, 2)
plt.title('geocentric outer', fontsize=fs)
for body in (earth, mars, saturn, uranus):
x, y, z = body.posn_geocentric_outer / AU
plt.plot(x, y, linewidth=lw)

plt.subplot(2, 2, 4)
plt.title('heliocentric outer', fontsize=fs)
for body in (earth, mars, saturn, uranus):
x, y, z = body.posn_heliocentric_outer / AU
plt.plot(x, y, linewidth=lw)

plt.show()


The shape of the orbit would be an epicycloid.