Snowflake-a-thon postscript

Jan 21 2005

It’s been very cold here in Cambridge this week; the desktop weather monitor was displaying a frightening 2 degrees last night just before I made my way to bed … without taking into account the wind chill. While the frigid air may be unsuitable for walking to the bus, it was just right for hot chocolate and the first annual snowflake-a-thon.

As I posted previously, the Simplicity consortium sponsored an event where the goal was to create a simple program that generated a beautiful snowflake. The event went off pretty well … plenty of contestants and a good number of spectators. We had grown a bit concerned last week when very few people were signed up to participate, so we upped the advertising efforts a bit. We hit the major spots with posters and submitted an MIT homepage spotlight request, which seemed to work. In the end, it was a lot of fun and the winning entries were incredibly cool, though they made my weak effort even more apparent. I do wish there had been more entries that exhibited simplicity. I think all but one entry, Eric Blankenship’s snap to snowflake, treated simplicity as a constraint and not a value. Interestingly, most people equated simplicity to either readable or succinct code (myself included). Even so, the winners were some of the most complex pieces in terms of coding. That leads again to a question that I hear often these days: can simple programs be constructed with complex code? At least in this case, it seemed that having a little complexity under the hood was an advantage. Would that still have been the case if it had been a design competition and not a programming competition?

The event was a lot of fun; I’m glad I did it. I think the video of all the entries is going on line at some point. I assume John will post it to his Simplicity blog, but I will try to post a link when it happens.

My entry is shown below, just a few lines of Mathematica code, nothing spectacular.

(* kelly norton 2005 * math: simple, doesn't blow. *)

<<Graphics`ParametricPlot3D`
<<Graphics`Shapes`
fa[v_] := ParametricPlot3D[{
   x Sin[x/5] (v + Sin[y + x]),
   x Cos[x/5] (v + Sin[y + x]),
   x Cos[y+ x], EdgeForm[]}, {x,0,2Pi}, {y,0,2Pi}];

fb[v_] := ParametricPlot3D[{
   x Cos[x/5] (v + Cos[y + x]),
   x Sin[x/5] (v + Cos[y + x]),
   x Sin[y + x ], EdgeForm[]}, {x, 0, 2Pi}, {y, 0, 2Pi}];

e = Show[{ fa[30], fb[30], fa[60], fb[60]}];
Show[{
   e,
   RotateShape[e,0,0,Pi],
   RotateShape[e,0,0,Pi/3],
   RotateShape[e,0,0,2 Pi/3],
   RotateShape[e,0,0,-Pi/3],
   RotateShape[e,0,0,-2 Pi/3]},
   LightSources-> {
      {{"{{"}} 100, 0, 100},RGBColor[0.20, 0.40, 0.80]},
      {{"{{"}} 100, 100, 100},RGBColor[1.00, 0.60, 0.00]},
      {{"{{"}}-100,-100, 100},RGBColor[0.30, 1.00, 1.00]}},
   ViewPoint->{1,0,.6},Boxed->False,Axes->False];

Export[“005.pdf”,%,“PDF”];

My snowflake entry