I started to think about my ICM final project in mid-November. Over the course of the semester I’ve learned Processing basics and I wanted to work on a final project that would take my skills and thinking further.
The advice at ITP is to follow your passions; figure out what moves you and use your work as a vehicle to pursue your interests. In some ways this has been hard advice for me to follow this semester. I’ve learned that I have trouble focusing my passions and when given the directive to “do whatever you want” my brain sort of freezes up. I needed a more linear approach to this final, so I started to go back through some chapters in Learning Processing including the chapter on mathematics. While math hasn’t ever been my strong suit, I’ve always had an admiration for mathematicians and an aspiration to portray myself as someone who’s not afraid of a mathematical challenge. I decided I wanted to work on something with math. This led me to consider a project involving natural systems. It seemed I was on the track toward something scientific.
I started to look around for videos of well-studied, fairly basic systems. I knew wasn’t going to break any new ground or wander into uncharted territory with this project, I wanted to keep my scope realistic. I thought perhaps I could take a well-known system and figure out how to replicate it in Processing. Not add any new information, not even necessarily make it look beautiful, but at least I’d get to do some math. I started to make some very simple sketches as a way to consider what might become the most successful path. (It’s easy to see the errors in these sketches, but please remember they were just a place to start!)
Inspired by cell division, I made this basic sketch that divides a couple rectangles:
Inspired by the solar system, I made this simple sketch with two rotating spheres, one orbiting to other:
Inspired by a nautilus shell, I made this simple sketch which uses circles to trace the path of growth:
After presenting my ideas to my ICM class, I was advised to look at The Nature of Code, Shiffman’s new book project which is all about mathematics and simulating systems that are part of nature. I started to read that book and got kind of caught up working through the examples. I had to stop and focus.
It was at this point that Todd Bryant approached me about teaming up on this final project. We had both proposed projects that explored natural systems and it seemed like a good fit to work together. One thing I’ve come to rely on this semester is group work. I feel like I can think better in a group, like I have one whole brain instead of just brain fragments separated by vast caverns of dead air. Todd suggested we work with the code for a classic project called Game of Life created by John Conway. We decided to make the game interactive. The Game of Life establishes a set of rules for each cell in a grid. Cells are either alive or dead and the state of each cell changes depending on it’s number of neighbors. In it’s original form, the Game of Life randomly assigns each cell a state when it starts, we wanted to make a sketch where the movement of a user would reset the affected cells.
We started by taking a basic motion tracking sketch and making it pixelated, for easier integration into Game of Life, which uses a grid. It took a lot of figuring — we tried downsizing the video capture object, we tried adjusting the iterator to skip over some pixels, nothing was working. As we continued to work and talk it over with others, a deceptively simply solution arose: we had to write the movement to a second PImage to which we applied the pixelation. It worked.
The second step was to bring together the Game of Life code and our new pixelated motion detection code. We tried a lot of things, mostly related to adjusting the function which initializes the game and assigns each cell an alive or dead status. We nested for loops inside for loops inside for loops and all we got was a very, very slow moving sketch (if it didn’t crash first). We tried putting the result of the motion detection into new variables which we tried to pass into the Game of Life. We puzzled over it. We spun our wheels. Then we started to ask for help, we needed a fresh set of eyes on the problem.
We’d been approaching the problem correctly but we were making it a bit too hard. Instead of creating new variables or building out a million loops, we could think about applying the result of the motion detection directly to the Game of Life grid, which is built from a 2D array. So this is the essence of what we did. It was really exciting when we got the sketch to work! The motion is quite apparent and the reset effect is great. We also created some modified rules which are triggered with key presses. The best one is the New York City set of rules for life/death which makes the cells more tolerant of overcrowding. Here’s a screen capture of the sketch:
This was a great project to work on for the final. It had a concrete solution which was difficult to arrive at but worked well once solved. And it’s a nice way to start to think about modeling natural systems–whether that’s a petri dish, movement within a community, or maybe even something really complex like the impact of human activity on the environment: a simple set of rules creates a dynamic system, random (known or unknown) input effects the system and can be varied, the system changes as a result and causes changes in future generations. But maybe I’m getting ahead of myself. I can’t claim to know these things well enough to back up such statements, but it was a valuable project nonetheless. And it got me away from the triangles that had been taking up a lot of my time (but I’m not abandoning them! I’m going to revisit those triangles in January…).