The penrose program draws quasiperiodic tilings.
See Onoda, Steinhardt, !DiVincenzo? and Socolar in Phys. Rev. Lett. 60, #25, 1988 or Strandburg in Computers in Physics, Sep/Oct 1991.
This implementation uses the simpler version of the growth algorithm, i.e., if there are no forced vertices, a randomly chosen tile is added to a randomly chosen vertex (no preference for those 108 degree angles).
There are two essential differences to the algorithm presented in the literature: First, we do not allow the tiling to enclose an untiled area. Whenever this is in danger of happening, we just do not add the tile, hoping for a better random choice the next time. Second, when choosing a vertex randomly, we will take one that lies withing the viewport if available. If this seems to cause enclosures in the forced rule case, we will allow invisible vertices to be chosen.
Tiling is restarted whenever one of the following happens: there are no incomplete vertices within the viewport or the tiling has extended a window's length beyond the edge of the window horizontally or vertically or forced rule choice has failed 100 times due to areas about to become enclosed.
penrose accepts the following options:
Draw on a newly-created window. This is the default.
Draw on the root window.
If on a color display, pretend we're on a monochrome display.
Install a private colormap for the window.
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.
How many colors should be used (if possible). Default 64. The colors are chosen randomly.
How big the tiles should be. Default 40 pixels.
How long (in 1/1,000,000'ths of a second) to wait between drawing each tile. Default 10,000 or .01 seconds.
How long to wait between starting a completely new tiling. Default 3 seconds.
to get the default host and display number.
Copyright 1996 by Timo Korvola.