This is a javascript program written by Pat Hooper to draw variants of the Necker cube surface. It was inspired by the paper of the same name written jointly by Pat Hooper and Pavel Javornik.
Currently this program only works on a computer with a mouse. It seems to run well in at least firefox and chrome. Here are some tips for interacting with the App:
The polyhedral surfaces drawable by the app are embedded in ℝ3; and built out of rectangles, each parallel to one of the three coordinate planes. The surface is determined by three functions f,g,h: ℤ ⟶ ℝ>0. How this works is explained by the following figure, which explains how several edge lengths are given by values of these functions. The remainder of the lengths of edges in this figure follow from the fact that all these polygons are rectangles, so opposite sides of each quadrilateral have the same length.
If you have questions, please send email to me.
You need to define three vectors in \(\mathbb{R}^2\): \(\mathbf{u}\), \(\mathbf{v}\), and \(\mathbf{w}\). Every vector in \(\mathbb{R}^2\) should be representable as a positive linear combination of the vectors. These represent the linear ``projections'' of the standard basis vectors \((1,0,0)\), \((0,1,0)\) and \((0,0,1)\), respectively.
You also need to define three functions: \(f, g, h: \mathbb{N} \to \mathbb{R}\). These represent widths of rectangles in the three coordinate directions. See the about popup for more information.
Mathematical quantities should be defined using the syntax of the math.js javascript package. You can define auxiliary quanities if it is useful. Definitions should be on distinct lines. For example, a vector in \(\mathbb{R}^2\) can be defined via u = [1.1, sqrt(3)]
. An example function is f(n) = abs(cos(n))*e^n
.
After filling out the form, click the update button under the form.
These settings effect the display of the tiling.
Tile limit: Maximum number of tiles to display.
Tile colors: Colors of tiles obtained by projecting squares parallel to the coordinate planes. Any color accepted by CSS should work.
Edges: Configuration for edges of tiles. Note that thickness is measured in mathematical coordinates, so choose something small like “0.05px”.
Background: Color shown in regions not covered by tiles.
You can save the app settings and store them in a json file. This file can later be uploaded to the app. Before you do, please fill out the following:
Description of save (optional):
You can load settings from a previously downloaded json file.