The first polyhedron takes a little while, as the javascript and vrml software is loaded --- don't be alarmed by the initial wait. After that, it is reasonably fast until you aspire to something so big that you run out of memory. The status bar at the bottom of this window lets you know what it is working on. This program works under Netscape 4 and higher on a PC or Irix system with CosmoPlayer. It does not work with recent versions of Internet Explorer (but it used to work with older versions.)
While the algorithms and presentation here are mine, credit for the notation goes to Conway. Send me comments and suggestions at george@georgehart.com
Basics: In this notation, one specifies a "seed" polyhedron with a capital letter. Operations to perform on any polyhedron are specified with lower-case letters preceding it. This web page contains a javascript program with a small set of seeds and operators, from which an infinite number of derived polyhedra can be generated. The notation specifies only the topological polyhedron, not its geometric realization, and this program is content to come up with any convenient realization.
Seeds: The platonic solids are denoted T, O, C, I, and D, according to their first letter. Other polyhedra which are implemented here include prisms, Pn, antiprisms, An, and pyramids, Yn, where n is a number (3 or greater) which you specify to indicate the size of the base you want, e.g., Y3=T, P4=C, and A3=O.
Operations: Currently, dtkajsgebomrp are defined. They
are motivated by the operations needed to create the Archimedean solids
and their duals from the platonic solids. Try each on a cube:
d = dual | The dual of a polyheron has a vertex for each face, and a face for each vertex, of the original polyhedron, e.g., dC=O. Duality is an operation of order two, meaning for any polyhedron X, ddX=X, e.g., ddC=dO=C. |
t = truncate all vertices
tn = just n-fold vertices |
Truncating a polyhedron cuts off each vertex, producing a new n-sided face for each n-fold vertex. The faces of the original polyhedron still appear, but have twice as many sides, e.g., the tC has six octagonal sides corresponding to the six squares of the C, and eight triangles corresponding to the cube's eight vertices. |
k = kis all faces
kn = just n-sided faces |
The kis operation divides each n-sided face into n triangles. A new vertex is added in the center of each face, e.g., the kiscube, kC, has 24 triangular faces. The k operator is dual to t, meaning kX=dtdX. |
a = ambo | The ambo operation can be thought of as truncating to the edge midpoints. It produces a polyhedron, aX, with one vertex for each edge of X. There is one face for each face of X and one face for each vertex of X. Notice that for any X, the vertices of aX are all 4-fold, and that aX=adX. If two mutually dual polyhedra are in "dual position," with all edges tangent to a common sphere, the ambo of either is their intersection. For example aC=aO is the cuboctahedron. |
j = join | The join operator is dual to ambo, so jX=dadX=daX. jX is like kX without the original edges of X. It produces a polyhedron with one 4-sided face for each edge of X. For example, jC=jO is the rhombic dodecahedron. |
e = expand | This is Mrs. Stott's expansion operation. Each face of X is separated from all its neighbors and reconnected with a new 4-sided face, corresponding to an edge of X. An n-gon is then added to connect the 4-sided faces at each n-fold vertex. For example, eC is the rhombicuboctahedron. It turns out that eX=aaX and so eX=edX. |
s = snub | The snub operation produces the snub cube, sC, from C. It can be thought of as eC followed by the operation of slicing each of the new 4-fold faces along a diagonal into two triangles. With a consistent handedness to these cuts, all the vertices of sX are 5-fold. Note that sX=sdX. |
g = gyro | The dual operation to s is g. gX=dsdX=dsX, with all 5-sided faces. The gyrocube, gC=gO="pentagonal icositetrahedron," is dual to the snub cube. g is like k but with the new edges connecting the face centers to the 1/3 points on the edges rather than the vertices. |
b = bevel | The bevel operation can be defined by bX=taX. bC is the truncated cuboctahedron. |
o = ortho | Dual to e, oX=deX=jjX. oC is the trapezoidal icositetrahedron, with 24 kite-shaped faces. oX has the effect of putting new vertices in the middle of each face of X and connecting them, with new edges, to the edge midpoints of X. |
m = meta | Dual to b, mX=dbX=kjX. mC has 48 triangular faces. m is like k and o combined; new edges connect new vertices at the face centers to the old vertices and new vertices at the edge midpoints. mX=mdX. mC is the "hexakis octahedron." |
r = reflect | Changes a left-handed solid to right handed, or vice versa, but has no effect on a reflexible solid. So rC=C, but compare sC and rsC. (This and the next are my own extensions, not sanctioned by Conway.) |
p = propellor | Makes each n-gon face into a "propellor" of an n-gon surrounded by n quadrilaterals, e.g., pT is the tetrahedrally stellated icosahedron. Try pkD and pt6kT. p is a self-dual operation, i.e., dpdX=pX and dpX=pdX, and p also commutes with a and j, i.e., paX=apX. |
Examples: Try each operator on simple polyhedra to see how they are defined, then work up to bigger things. Here are some suggestions for you to generate:
Symmetry is increased in only a few specific instances, e.g., gT=D, sT=I, aT=O, jT=C, aYn=An, t5dA5=D, tnYn=Pn (for n not 3).
Challenges: After the above examples, you might enjoy the challenge of trying to come up with the description of a polyhedron you haven't seen before. Here are some nice ones to try. For a starting point, note their symmetry. The answer, in each case, appears in the status bar below when you hold the mouse over the link, so don't look there unless you give up:
Canonicalization can be requested, with my new iterative "primal/dual" algorithm, which is faster than one I have published elsewhere, but still slow in javascript. The c operator does ten iterations of this algorithm. E.g., t4Y4 gives a brick, but ct4Y4 gives a canonical version, i.e., all edges are tangent to the unit sphere, which in this case gives the cube. Only try this on simple solids unless you are about to go out to dinner and will check the answer later. With more iterations, e.g., cct8Y8 the sides become more square.
For large polyhedra (requiring four or more operations) this program
becomes something of a memory hog and slows down everything on your machine.
The point where this occurs will depend on how much disk space you have
available as memory swap space. Even after a complex result is shown, it
takes a while for your machine to recover, as Netscape gets tied up in
garbage collection. After generating a monster polyhedron, I have found
that restarting is faster.