epicycle(6x)

πŸ’« epicycle(6x) β€” the XScreenSaver manual, but make it cute πŸ’«

okay bestie, so this is a page from the XScreenSaver manual and honestly? it's giving math girlboss. it draws a point going around a circle, which goes around another circle, which goes around another circle, and… you get it. iykyk πŸ’…


🌸 NAME 🌸

epicycle β€” draws a point moving around a circle which moves around a circle which… πŸŒ€ (yes the sentence literally never finishes, that's the joke, it's iconic)


✨ SYNOPSIS ✨

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]

like, that's a LOT of flags but we're gonna go through every single one, no cap 🫢


πŸ¦‹ DESCRIPTION πŸ¦‹

so epicycle 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 it produces can be simple or complex, convex or concave β€” but bestie, they're always closed curves (they never go on indefinitely). periodt. ✨

you can configure both the way the curves are drawn and the way the random sequence of circles is generated β€” either with command-line options or with X resources. your world, your rules 🌈


πŸŽ€ OPTIONS πŸŽ€

  • --display host:display.screen β€” specifies which X display we should use (peep the section DISPLAY NAMES in X(1) for more info on this one).
  • --root β€” draws on the root window.
  • --window-id number β€” draws on the specified window.
  • --window β€” draws on a newly-created window. this is the default, main character behavior πŸ‘‘
  • --mono β€” if we're on a color display, pretend we're on a monochrome display. if we're on a mono display, we have no choice (girl, none).
  • --install β€” installs a private colormap for the window.
  • --noinstall β€” doesn't install a private colormap for the window.
  • --visual viz β€” specifies 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) gets consulted to obtain the required visual. like it literally goes and asks 🧚

  • --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 don't 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. little breather πŸ’…
  • --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. (yes, that's what it says β€” we keep it exactly as the page says it 🫑)
  • --harmonics N β€” number of possible harmonics; the larger this value is, the greater the possible variety of possible speeds of epicycle. more variety = more chaos = slay 🌈
  • --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 β€” displays 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.

πŸ–±οΈ USER INTERFACE πŸ–±οΈ

the program runs mostly without user interaction (lowkey just vibing on its own). 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 gets abandoned and another one gets started. ✨ new figure, new me ✨


πŸ‘‘ HISTORY πŸ‘‘

grab a snack, this is a whole saga πŸ“

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 way that this is literally a whole history-of-science speedrun 😭πŸ”₯


πŸ’€ BUGS πŸ’€

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. so yeah, don't run this over a potato connection, ngl πŸ™ˆ


🌱 ENVIRONMENT 🌱

  • 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.

🫢 SEE ALSO 🫢

X(1), xscreensaver(1) β€” go read those too bestie, they're the parent friend group πŸ’œ


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.

translation: it's free, do what you want, but keep the copyright notice and don't come for anyone if it breaks πŸ’… (also no warranty, fr fr)

⭐ AUTHOR ⭐

James Youngman <jay@gnu.org>, April 1998. an icon, honestly πŸŽ€


and that's the whole page!! 🌸 this came from X Version 11, and the page itself is dated 6.09 (07-Jun-2024) β€” mwah, go draw some circles bestie πŸŒ€πŸ’–

πŸ“¦ where this page comes from