I wanted to do something interactive for Maker Faire last year. I had been drawing my PenFlakes, and thought it would be cool if people could design their own and print them out. So I created FlakePad, a javascript/HTML5 web app that enforces the basic symmetry of a snowflake, and provides a hexagonal grid to work off of.

Aside from being a great way to get my hands dirty with HTML5, the most interesting part of the app was creating the hexagonal grid. I wound up learning about and utilizing Isometric Cubic Coordinates. These coordinates provide an amazingly simple way to label hexagons on a grid, as well as a relatively simple transformation to and from standard Cartesian Coordinates. The basic trick is to recognize that a hexagonal grid, can be seen as a projection of a 3D arrangement of cubes centered on the plane x+y+z=0 (imagine Q*bert, the old NES game).


For one year, starting on May 5, 2011, I sat down with a pen and paper every single day and drew a black-and-white geometric design with sixfold dihedral symmetry, AKA a snowflake. The finished designs can be seen at http://penflakes.com.

I've always been fascinated by the physics and mathematics of snowflakes. Water molecules tend to line up along a hexagonal grid when they crystalize. This grid results from a combination of 1. the hydrogen bonds that hold the molecules together, 2. the angle between the two hydrogen atoms being close to the angle of a hexagon vertex, and 3. hexagons being one of the few regular polygons that tessellate. If water didn't exhibit hydrogen bonding, or if the angle of the water molecule was much different, snowflakes as we know them wouldn't exist. To me, this happy coincidence of math and physics is just as beautiful, if not more beautiful than the resulting patterns.

So when, one day in 2011, I saw an 8-sided snowflake decoration while out to lunch with some friends, I couldn't help but explain how such a design completely missed the deeper beauty of a real six-sided snowflake. With snowflakes on my mind, and as a chronic doodler (a habit rekindled in part by the amazing Doodling in Math Class videos), it was just a matter of time before I started doodling increasingly complex snowflakes. Intrigued by the possibilities, I started drawing one every day.

Snowflakes are also known for their clichéd uniqueness, which is intimately related to imperfection. This is in stark contrast to the trivially reproducible, and arbitrarily fine precision offered by the emergence of digital media. The opportunity for infinitely reproducible digital perfection certainly creates value in our lives, but it can also detract if we aren't careful. For example, sharing photos on Google+ or Facebook can add immense social value, but it can also detract if we forget the value of living in the unique, irreproducible, real-world moments those photos represent. So although it would have been easy to create perfect snowflake designs with digital vector graphics, I chose to use old fashioned pen and paper instead. Each drawing is on a piece of paper that I held in my hands, and spent about an hour drawing a pen across, influenced by whatever events happend in my life that day. I also decided to do the project for exactly one year so that each drawing represented exactly one day of the year.

As for technical details, I used a hexagonal grid generated by the Incompetech Graph Paper Generator, and took much inspiration from this book of snowflake photography by Kenneth Libbrecht.

MIT Snowflake-A-Thon 2005

In January of 2005 I participated in the Snowflake-A-Thon hosted by the Simplicity group at the MIT Media Lab. The challenge was to write the simplest program that produced the most beautiful snowflake. You can see the gallery of all the snowflakes and a video of mine here. Update: The gallery is no longer available on the Media Lab site, but you can see my video below.

My program created a hexagonal grid, and assigned a number to each hexagon. The center started as "1" and the rest started as "0". After every time step, the value of each hexagon was added to each of its neighbors, modulo 32. I ran the code for a few time steps and then mapped the numbers to a gradient from dark blue to white. I got the idea from playing around with 2d cellular automata on a hexagonal grid when I was in high school.

I thought the resulting snowflake was really nice. Apparently the Simplicity people thought I was a total weirdo for coding a snowflake in MATLAB, but I remain pleased with the results.