epicycle - draws a point moving around a circle which moves around
a cicle which...
epicycle [--display host:display.screen] [--root]
[--window-id number][--window] [--mono] [--install] [--noinstall]
[--visual viz] [--colors N] [--foreground name]
[--color-shift N] [--delay microseconds] [--holdtime
seconds] [--linewidth N] [--min_circles N]
[--max_circles N] [--min_speed number] [--max_speed
number] [--harmonics N] [--timestep number]
[--divisor_poisson probability] [--size_factor_min number]
[--size_factor_max number] [--fps]
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 indefinitely).
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 resources.
- --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).
- --root
- Draw on the root window.
- --window-id number
- Draw on the specified window.
- --window
- Draw on a newly-created window. This is the default.
- --mono
- If on a color display, pretend we're on a monochrome display. If we're on
a mono display, we have no choice.
- --install
- Install a private colormap for the window.
- --noinstall
- 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,
directcolor,
number
If a decimal or hexadecimal number is used,
XGetVisualInfo(3X) is 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 colour.
- --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 the
epicycles.
- --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 their parents.
- --size_factor_max
number
- Epicycles are never more than this factor smaller than their parents.
- --fps
- Display the current frame rate and CPU load. --timestep 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.
- DISPLAY
- to get the default host and display number.
- XENVIRONMENT
- to get the name of a resource file that overrides the global resources
stored in the RESOURCE_MANAGER property.
- XSCREENSAVER_WINDOW
- The window ID to use with --root.
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 <jay@gnu.org>, April 1998.