Conway Notation for Polyhedra
This
page is an experimental implementation of a nifty notation which John Conway
has proposed for describing polyhedra. Just type in the box below the Conway
notation of any polyhedron, and click the button. Try, in this order, I
for icosahedron, then tI for truncated icosahedron, and
stI for snub truncated icosahedron. The stI is shown
at right. A 3D version of each will appear on your screen if you
have a VRML viewer installed.
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
Polyhedron Generator:
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:
-
ggC is the gyrogyrocube, with 120 pentagonal faces.
-
k5aY5 is a familiar solid --- figure out why.
-
jtI or jkD is the rhombic enneacontahedron.
-
jtD or jkI is another enneacontahedron with tetragonal
faces.
-
jP3 is the simplest polyhedron with an odd number of 4-sided
faces.
-
at5jP5 surprised me --- one of the Johnson solids.
-
t10k10tD I don't know why I like this; something about those 120
trapezoids.
-
eepT has wonderful spiral paths, as seen at right. (How many hops
in a round trip ?)
-
eesD is beautiful, and as big as I can do on my PC before Netscape
runs out of memory and crashes. (It appears in Lalvani's book Transpolyhedra.)
-
eptI is also beautiful, so I made one in wood. See my
sculpture page.
Symmetry: Starting with a symmetric solid, the result usually has
the same symmetry, but not always. The only operators which can reduce
symmetry are
s and g. For example,
sC and g
C
have none of the mirror planes of
C, but all the rotational symmetry,
so there are left- and right-hand forms of each. There are four forms
of snubsnubcube:
ssC,
rssC,
srsC, and
rsrsC.
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:
the 72-faced Renaissance favorite
a dizzying set of paths
Victoria's flower ball
a challenging snub
Implementation: By duality of operators, I chose
not to implement t, j, and s directly, but as dkd, dad, and dgd, respectively.
Many operations are executed symbolically on the command string before
the numeric computations begin, e.g., two d's in a row, duals of the platonics,
and many operations on T. If you care, this box shows what is actually
executed:
The
status bar at the bottom of your browser indicates what is going on at
each step. The previous result and its dual are always saved, so if your
next command involves an operation on the previous polyhedron or its dual,
the program continues from where it left off.
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.
Acknowledgments: Thank you Matthew Cook and Don Hatch for valuable
improvements.