epicycle - draws a point moving around a circle which moves around a cicle
] [-root] [-window] [-mono]
[-install] [-noinstall] [-visual viz
] [-colors N
] [-color-shift N
] [-delay microseconds
] [-linewidth N
] [-min_circles N
] [-min_speed number
] [-max_speed number
] [-timestep number
] [-divisor_poisson probability
] [-size_factor_max number
The epicycle program draws the path traced out by a point on the edge of a
circle. That circle rotates around a point on the rim of another circle, and
so on, several times. The random curves produced can be simple or complex,
convex or concave, but they are always closed curves (they never go in
You can configure both the way the curves are drawn and the way in which the
random sequence of circles is generated, either with command-line options or X
- -display host:display.screen
- Specifies which X display we should use (see the section
DISPLAY NAMES in X(1) for more information about this option).
- Draw on the root window.
- Draw on a newly-created window. This is the default.
- If on a color display, pretend we're on a monochrome
display. If we're on a mono display, we have no choice.
- Install a private colormap for the window.
- Don't install a private colormap for the window.
- -visual viz
- Specify which visual to use. Legal values are the name of a
visual class, or the id number (decimal or hex) of a specific visual.
Possible choices include
default, best, mono, monochrome, gray, grey,
color, staticgray, staticcolor, truecolor, grayscale, greyscale, pseudocolor,
If a decimal or hexadecimal number is used, XGetVisualInfo
consulted to obtain the required visual.
- -colors N
- How many colors should be used (if possible). The colors
are chosen randomly.
- -foreground name
- With -mono, this option selects the foreground
- -delay microseconds
- Specifies the delay between drawing successive line
segments of the path. If you do not specify -sync, some X servers
may batch up several drawing operations together, producing a less smooth
effect. This is more likely to happen in monochrome mode (on monochrome
servers or when -mono is specified).
- -holdtime seconds
- When the figure is complete, epicycle pauses this
number of seconds.
- -linewidth N
- Width in pixels of the body's track. Specifying values
greater than one may cause slower drawing. The fastest value is usually
zero, meaning one pixel.
- -min_circles N
- Smallest number of epicycles in the figure.
- -max_circles N
- Largest number of epicycles in the figure.
- -min_speed number
- Smallest possible value for the base speed of revolution of
the epicycles. The actual speeds of the epicycles vary from this down to
min_speed / harmonics.
- -max_speed number
- Smallest possible value for the base speed of revolution of
- -harmonics N
- Number of possible harmonics; the larger this value is, the
greater the possible variety of possible speeds of epicycle.
- -timestep number
- Decreasing this value will reduce the distance the body
moves for each line segment, possibly producing a smoother figure.
Increasing it may produce faster results.
- -divisor_poisson probability
- Each epicycle rotates at a rate which is a factor of the
base speed. The speed of each epicycle is the base speed divided by some
integer between 1 and the value of the -harmonics option. This
integer is decided by starting at 1 and tossing a biased coin. For each
consecutive head, the value is incremented by one. The integer will not be
incremented above the value of the -harmonics option. The argument
of this option decides the bias of the coin; it is the probability that
that coin will produce a head at any given toss.
- -size_factor_min number
- Epicycles are always at least this factor smaller than
- -size_factor_max number
- Epicycles are never more than this factor smaller than
- Display the current frame rate and CPU load.
Option Resource Default Value
------ -------- -------------
-colors .colors 100
-delay .delay 1000
-holdtime .holdtime 2
-linewidth .lineWidth 4
-min_circles .minCircles 2
-max_circles .maxCircles 10
-min_speed .minSpeed 0.003
-max_speed .maxSpeed 0.005
-harmonics .harmonics 8
-timestep .timestep 1.0
-divisor_poisson .divisorPoisson 0.4
-size_factor_min .sizeFactorMin 1.05
-size_factor_max .sizeFactorMax 2.05
Before the drawing of the figure is begun, a preliminary calculation of the path
is done in order to scale the radii of the epicycles so as to fit the figure
on the screen or window. For the sake of speed, This calculation is done with
a larger timestep than the actual drawing. The time-step used is the value of
option multiplied by the timestepCoarseFactor resource.
The default value of 1 will almost always work fast enough and so this
resource is not available as a command-line option.
The program runs mostly without user interaction. When running on the root
window, no input is accepted. When running in its own window, the program will
exit if mouse button 3 is pressed. If any other mouse button is pressed, the
current figure will be abandoned and another will be started.
The geometry of epicycles was perfected by Hipparchus of Rhodes at some time
around 125 B.C., 185 years after the birth of Aristarchus of Samos, the
inventor of the heliocentric universe model. Hipparchus applied epicycles to
the Sun and the Moon. Ptolemy of Alexandria went on to apply them to what was
then the known universe, at around 150 A.D. Copernicus went on to apply them
to the heliocentric model at the beginning of the sixteenth century. Johannes
Kepler discovered that the planets actually move in elliptical orbits in about
1602. The inverse-square law of gravity was suggested by Boulliau in 1645.
Isaac Newton's Principia Mathematica
was published in 1687, and proved
that Kepler's laws derived from Newtonian gravitation.
The colour selection is re-done for every figure. This may generate too much
network traffic for this program to work well over slow or long links.
Copyright © 1998, James Youngman. Permission to use, copy, modify,
distribute, and sell this software and its documentation for any purpose is
hereby granted without fee, provided that the above copyright notice appear in
all copies and that both that copyright notice and this permission notice
appear in supporting documentation. No representations are made about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
James Youngman <email@example.com>, April 1998.