# Plotting Epicycles (Shallow Thoughts)

Akkana's Musings on Open Source Computing and Technology, Science, and Nature.

## Plotting Epicycles

Galen Gisler, our master of Planetarium Tricks, presented something strange and cool in his planetarium show last Friday.

He'd been looking for a way to visualize the "Venus Pentagram", a regularity where Venus' inferior conjunctions -- the point where Venus is approximately between Earth and the Sun -- follow a cycle of five. If you plot the conjunction positions, you'll see a pentagram, and the sixth conjunction will be almost (but not quite) in the same place where the first one was. Supposedly many ancient civilizations supposedly knew about this pattern, though as Galen noted (and I'd also noticed when researching my Stonehenge talk), the evidence is sometimes spotty.

Galen's latest trick: he moved the planetarium's observer location up above the Earth's north ecliptic pole. Then he told the planetarium to looked back at the Earth and lock the observer's position so it moves along with the Earth; then he let the planets move in fast-forward, leaving trails so their motions were plotted.

The result was fascinating to watch. You could see the Venus pentagram easily as it made its five loops toward Earth, and the loops of all the other planets as their distance from Earth changed over the course of both Earth's orbits and theirs.

You can see the patterns they make at right, with the Venus pentagram marked (click on the image for a larger version). Venus' orbit is white, Mercury is yellow, Mars is red. If you're wondering why Venus' orbit seems to go inside Mercury's, remember: this is a geocentric model, so it's plotting distance from Earth, and Venus gets both closer to and farther from Earth than Mercury does.

He said he'd shown this to the high school astronomy club and their reaction was, "My, this is complicated." Indeed. It gives insight into what a difficult problem geocentric astronomers had in trying to model planetary motion, with their epicycles and other corrections.

Of course that made me want one of my own. It's neat to watch it in the planetarium, but you can't do that every day.

So: Python, Gtk/Cairo, and PyEphem. It's pretty simple, really. The goal is to plot planet positions as viewed from high above the north ecliptic pole: so for each time step, for each planet, compute its right ascension and distance (declination doesn't matter) and convert that to rectangular coordinates. Then draw a colored line from the planet's last X, Y position to the new one. Save all the coordinates in case the window needs to redraw.

At first I tried using Skyfield, the Python library which is supposed to replace PyEphem (written by the same author). But Skyfield, while it's probably more accurate, is much harder to use than PyEphem. It uses SPICE kernels (my blog post on SPICE, some SPICE examples and notes), which means there's no clear documentation or list of which kernels cover what. I tried the kernels mentioned in the Skyfield documentation, and after running for a while the program died with an error saying its model for Jupiter in the de421.bsp kernel wasn't good beyond 2471184.5 (October 9 2053).

Rather than spend half a day searching for other SPICE kernels, I gave up on Skyfield and rewrote the program to use PyEphem, which worked beautifully and amazed me with how much faster it was: I had to rewrite my GTK code to use a timer just to slow it down to where I could see the orbits as they developed!

It's fun to watch; maybe not quite as spacey as Galen's full-dome view in the planetarium, but a lot more convenient. You need Python 3, PyEphem and the usual GTK3 introspection modules; on Debian-based systems I think the python3-gi-cairo package will pull in most of them as dependencies.