Dance of Planets: Intro
I got some fantastic answers to my question regarding the celestial dance of Venus and Earth. In this question, I am going to ask a more generalized version of the question concerning the dance of any pair of two celestial objects. For now, let me consider the dance of Venus and Earth when observed from the Earth. From our perspective on Earth (that is, in a geocentric system), we feel that we are standing still and Sun is orbiting us (while in reality, Earth is orbiting the Sun). We also know that Venus is orbiting the Sun. Now imagine a diagram with Earth fixed at the center with Sun and Venus orbiting Earth and Venus itself orbiting Sun. In this diagram, draw a hypothetical line between the center of Venus and the center of Sun and then run the simulation to observe Sun and Venus orbiting Earth with different velocities. I used sgmoye's answer using TikZ to generate the step-by-step construction of the Venus-Earth dance for an easier visualization:
\documentclass[border=1cm]{standalone}
\usepackage[margin=1in]{geometry}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{keyval}
\newlength{\outerdistance}
\setlength{\outerdistance}{5.41cm}
\newlength{\innerdistance}
\setlength{\innerdistance}{7.48cm}
\def\outerperiod{123}
\def\innerperiod{200}
\def\step{5}
\begin{document}
\begin{tabular}{|c|c|c|}
\hline
\begin{tikzpicture}
\foreach \x in {0,\step,...,270}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{red}\scalebox{5}{$1$}};
\end{tikzpicture}%
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,360}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{red}\scalebox{5}{$2$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,540}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{red}\scalebox{5}{$3$}};
\end{tikzpicture}
\\
\hline
\begin{tikzpicture}
\foreach \x in {0,\step,...,720}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{orange}\scalebox{5}{$4$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,900}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{orange}\scalebox{5}{$5$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,1080}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{orange}\scalebox{5}{$6$}};
\end{tikzpicture}
\\
\hline
\begin{tikzpicture}
\foreach \x in {0,\step,...,1260}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{yellow}\scalebox{5}{$7$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,1440}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{yellow}\scalebox{5}{$8$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,1620}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{yellow}\scalebox{5}{$9$}};
\end{tikzpicture}
\\
\hline
\begin{tikzpicture}
\foreach \x in {0,\step,...,1800}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{green}\scalebox{5}{$10$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,1980}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{green}\scalebox{5}{$11$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,2160}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{green}\scalebox{5}{$12$}};
\end{tikzpicture}
\\
\hline
\begin{tikzpicture}
\foreach \x in {0,\step,...,2340}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{blue}\scalebox{5}{$13$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,2520}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{blue}\scalebox{5}{$14$}};
\end{tikzpicture}
&
\begin{tikzpicture}
\foreach \x in {0,\step,...,2700}{
\draw[black] (\x:\outerdistance) -- ({(\x/\outerperiod)*\innerperiod}:\innerdistance);
} \node {\color{blue}\scalebox{5}{$15$}};
\end{tikzpicture}
\\
\hline
\end{tabular}
\end{document}
I have several issues with this code:
Dance of Other Pairs of Planets
Venus and Earth are similar to each other in many aspects. They have roughly the same diameter (12,104km vs 12,756km) and their orbital (sidereal) period ratio is 224.7/365.2 ~ 0.618, the golden ratio. Furthermore, the orbit of Earth and Venus around the Sun are actually very close to circular paths. In other words, the orbital eccentricity of Venus and Earth are close to zero (0.007 vs 0.017) and this will lead to the beautiful pentagram of Venus as shown in the above image (look at the last step, number 15). It does not matter whether we draw the Venus-Earth dance from a geocentric perspective (as shown above) or in a heliocentric system (with Sun at the center); the Venus Pentagram will be the same. In fact, it seems that the celestial dance of two planets is independent of the observer. For example, look at this colored version of the Venus Pentagram in a heliocentric model (created by sgmoye; taken from here):
I tried to generate the same diagram for the dance of other pairs of planets in our solar system. You can find a complete list of such diagrams in the final pages of A Little Book of Coincidence in the Solar System by John Martineau. Unfortunately, the TikZ code used for generating the Venus-Earth dance cannot reproduce the dance between planets that are far from each other. For instance, I tried sgmoye's \makevenus macro (changed to \danceofplanets in this example) to get the Mercury-Mars dance but I needed to manually change maxtimes to get rid of the dimensions too large error while compiling:
\documentclass[tikz,border=20pt]{standalone}
\usepackage{keyval}
\usepackage{caption}
\usepackage{subcaption}
%% Initialization
\newlength{\outerdistance} %% Distance of the outer planet from Sun
\setlength{\outerdistance}{22.79cm}
\newlength{\innerdistance} %% Distance of the inner planet from Sun
\setlength{\innerdistance}{5.79cm}
\def\innerperiod{88} %% Orbital period of the inner planet (in days)
\def\outerperiod{687} %% Orbital period of the outer planet (in days)
\def\maxtimes{2700} %% Default max value for iteration
\def\increment{2} %% Default increment value
%% Define \danceofplanets macro
\makeatletter
\define@key{planet}{outerdistance}{\setlength{\outerdistance}{#1}}
\define@key{planet}{innerdistance}{\setlength{\innerdistance}{#1}}
\define@key{planet}{innerperiod}{\def\innerperiod{#1}}
\define@key{planet}{outerperiod}{\def\outerperiod{#1}}
\define@key{planet}{maxtimes}{\def\maxtimes{#1}}
\define@key{planet}{increment}{\def\increment{#1}}
\newcommand{\danceofplanets}[1][]{%
\setkeys{planet}{#1}
\begin{tikzpicture}
\foreach \x in {0,\increment,...,\maxtimes}{%
\draw[help lines] (\x:\outerdistance) -- ({(\x/\innerperiod)*\outerperiod}:\innerdistance);%% <<<--- avoids arithmetic overflow
}%
\end{tikzpicture}%
}
\begin{document}
\danceofplanets[ %% Venus and Earth
outerperiod=365.2,
innerperiod=224.7,
innerdistance=5.41cm,
outerdistance=7.48cm,
increment=5]
% \danceofplanets[ %% Mercury and Mars - TOO LARGE
% outerperiod=687,
% innerperiod=88,
% outerdistance=22.79cm,
% innerdistance=5.79cm,
% increment=5]
\danceofplanets[ %% Mercury and Mars - needs maxtimes<2099 to work
outerperiod=687,
innerperiod=88,
outerdistance=22.79cm,
innerdistance=5.79cm,
increment=1,
maxtimes=2098]
\end{document}
The \danceofplanets macro works fine for planets that are close to Sun; but when the planets are too far from Sun, this code requires several changes to maxtimes, innerdistance and outerdistance to make the dimensions small enough to be printed in the output. The ratio between innerdistance and outerdistance must be fixed and it is easy to figure out the approximate values to make the code compilable (check the values from this page). However, the exact value of maxtimes which generates the beautiful symmetric dance of the planets should be calculated by trial and error while using this macro. For example, \danceofplanets[ outerperiod=687, innerperiod=88, outerdistance=22.79cm, innerdistance=5.79cm, increment=1, maxtimes=360] generates the incomplete Mercury-Mars dance while \danceofplanets[ outerperiod=687, innerperiod=88, outerdistance=22.79cm, innerdistance=5.79cm, increment=1, maxtimes=2098] generates too many iterations of the dance.
Orbital Eccentricity
The TikZ code used in the examples above does not generate the dance of planets that are too far from the Sun (it will give a dimensions too large error which I don't know how to resolve). I tried a Metapost solution suggested by Thruston which happens to be totally helpful for generating the diagram for the dance of any pair of planets. Here is the heliocentric dance of Neptune and Pluto generated by Metapost:
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\def\outerdistance{59.064} % Pluto to Sun
\def\innerdistance{44.951} % Neptune to Sun
\begin{document}
\mplibnumbersystem{double}
\begin{mplibcode}
vardef hsv_color(expr h,s,v) =
% following wikipedia article on "HSL and HSV"
save chroma, hh, x, m;
chroma = v*s;
hh = h/60;
x = chroma * (1-abs(hh mod 2 - 1));
m = v - chroma;
if hh < 1: (chroma,x,0)+(m,m,m)
elseif hh < 2: (x,chroma,0)+(m,m,m)
elseif hh < 3: (0,chroma,x)+(m,m,m)
elseif hh < 4: (0,x,chroma)+(m,m,m)
elseif hh < 5: (x,0,chroma)+(m,m,m)
else: (chroma,0,x)+(m,m,m)
fi
enddef;
% Heliocentric Neptune-Pluto Dance
beginfig(1);
for t=0 step 1 until 360:
draw \innerdistance dir 90.56t -- \outerdistance dir 59.8t
withpen pencircle scaled 1/8 withcolor hsv_color(t, .4, .8); endfor;
endfig;
\end{mplibcode}
\end{document}
This diagram creates a seemingly symmetrical diagram for the Neptune-Pluto dance but it is not accurate in reality. The reason for the inaccuracy is that the orbital eccentricity of Pluto is 0.244 whereas that of Neptune is 0.011. This means that Pluto orbits the Sun in an elliptical path while Neptune's orbit is almost circular. I read the Metapost tutorial to find a method for drawing an elliptical path for Pluto but didn't find a solution. The main problem is to create a command for drawing a circular path that takes into account the orbital eccentricity of the planets with respect to Sun. More information on the orbital eccentricity of Pluto can be found on Wikipedia.
Orbital Inclination
The ecliptic is the plane of Earth's orbit around the Sun. Other planets are orbiting the Sun in planes with slight inclinations (less than 20 degrees) to the ecliptic. This is called the orbital inclination of the planets and it affects the dance of the planets. The orbital inclination of Venus is 3.4 degrees which is negligible when drawing the Venus Pentagram and does not affect it. However, Pluto's large orbital inclination (17.2 degrees) along with its elliptical orbit around the Sun will change the nature of the Neptune-Pluto dance. I'm not sure if there is a way to represent orbital inclination in either TikZ or Metapost and whether it affects the diagrams for the dance of the planets. The following animation shows the orbital inclination of Pluto (the red inclined ellipse):
Thanks for reading this long post and I appreciate your help with any of the mentioned issues.
















