Incomplete Open Dodecahedra

chriskw1 pts0 comments

Incomplete Open Dodecahedra – Chris K. W. – Computer stuff and stuff tangentially related to computer stuff

Incomplete Open Dodecahedra

July 7, 2026

I have a secret. Don’t tell anyone, but after majoring in Computer Science and Data Science at Berkeley’s College of<br>Letters and Sciences I somehow ended up with a Bachelor of<br>\({\color{#dd2222}\mathcal{A}}{\color{#dd8800}\mathfrak{r}}{\color{#00aa00}\mathfrak{t}}{\color{#0000ff}\mathfrak{s}}\). Anyway, it was thanks to<br>a required art class that I first encountered Incomplete Open Cubes by Sol LeWitt at<br>San Francisco’s Museum of Modern Art:

The main idea behind the installation is to explore “all of the ways of not making a cube.” In<br>other words, the structures comprise every way to combine up to 12 edges of a cube such that:

All of the edges are connected.

At least one edge is missing.

The structure is 3-dimensional (the edges aren’t all part of the same face).

Each structure is unique, treating rotations as equivalent.

After admiring the piece for a few minutes, I was inspired in the form of the<br>following syllogism I’m sure many other modern art museum visitors have experienced:

Art is created by artists.

I am not an artist.

Hey wait, I could’ve done that!

Therefore, it is not art.

The caveat here is even if I could’ve done it, I sure didn’t, and even if I did,<br>I sure wouldn’t be the first. Of course nothing’s stopping us from upping the original!

Keeping things Platonic

"The Six Platonic Solids" by James Arvo and David Kirk.

From left to right, back to front: Dodecahedron, Teapotahedron, Icosahedron, Cube, Tetrahedron, and Octahedron.

The cube is a member of a group of shapes known as the Platonic Solids,<br>a group of “regular” polyhedra where every edge is the same length, every face is the same<br>regular polygon, and every vertex has the same number of faces meeting.<br>Logically, in order to flex on Sol LeWitt’s Incomplete Open Cubes we’d want to replace the cubes with a more<br>complicated platonic solid, either a dodecahedron, icosahedron, or teapotahedron. I went<br>with the dodecahedron since it seemed natural to progress<br>from 4-sided faces to 5-sided faces.

Sol LeWitt's notes for Incomplete Open Cubes.

Sol LeWitt originally planned his installation by hand in a notebook, manually drawing out different combinations<br>of edges and verifying they meet all the conditions. Since cubes have 12 edges and each edge is either<br>present or not, there are a total of 2^12 = 4096 possible combinations of cube edges which<br>potentially needed to be checked for Incomplete Open Cubes. If we swap cubes for dodecahedra,<br>we’ll need to account for 30 edges, i.e. 2^30 ≈ 1 billion total combinations.<br>Exploring these by hand would be orders of magnitude more tedious, so we’ll need to find a way to automate the process somehow.

30 bits ought to be enough for anybody

If we want to write a program to search for valid structures, a natural way to represent<br>each set of edges is as a 30-bit integer. By numbering each of the edges in a dodecahedron,<br>we can set the corresponding bit to 1 if the edge is present in the structure or 0 otherwise. The following<br>animation shows us starting from an empty structure and adding each edge one by one in order, with a<br>Schlegel diagram showing the edge numbering. Bits<br>are numbered from 0 (least significant) to 29 (most significant):

You might notice this particular choice of numbering seems to spiral around<br>the dodecahedron in groups of 5, e.g. the first five edges go in counterclockwise order around<br>the bottom-most face. This grouping turns out to be useful for computing rotations.<br>Consider the following bit manipulation operations:

const ROT1_MASK_A: u32 = 0b01111_01111_01111_01111_01111_01111;<br>const ROT1_MASK_B: u32 = 0b10000_10000_10000_10000_10000_10000;

fn rot1(structure: u32) -> u32 {<br>return (structure & ROT1_MASK_A) 1<br>+ (structure & ROT1_MASK_B) >> 4;

The first bit mask selects 4 bits from each group of 5 and shifts them 1 bit to the left<br>The second bit mask selects the remaining bit from each group and shifts it 4 bits to the right.<br>This effectively cycles each group of 5 bits in a way which resembles rotation. The following<br>animation visualizes the bit shifts on an arbitrary structure:

To get a feel for how cycling works, try focusing on the innermost pentagon<br>of the diagram on the left (edges 0, 1, 2, 3 and 4) and comparing their movement to<br>bits 0 through 4 at the top right.

As is, this operation is only enough to allow us to cycle through five possible rotations of a<br>dodecahedron before it begins to repeat positions. In order to get the rest, we’ll need to find a way to rotate each structure<br>around a different axis. Unfortunately I could not find a more elegant way to do the second rotation<br>other than staring at the diagram and rotating shapes in my head until coming up with<br>the following mapping of edges from their old positions to their new positions:

0➔ 5 1➔11 2➔16 3➔ 6 4➔ 1<br>5➔15 6➔21 7➔12 8➔ 2 9➔ 0<br>10➔ 9 11➔20 12➔26...

edges structure from incomplete open cubes

Related Articles