Visualization 1

Using clojurescript and quil to generate interesting visuals

This post is part of a series:
Next: Visualization 2

First I want to appologize if you’ve seen this already, I originally had this up on my normal website, but I’ve decided to instead consolidate all my work to my blog.

This is the first of a series of visualization posts I intend to work on, each building from the previous one.

This visualization follows a few simple rules:

  • Any point can only be occupied by a single node. A point may be alive (filled) or dead (empty).

  • On every tick each live point picks from 0 to N new points to spawn, where N is the number of empty adjacent points to it. If it picks 0, it becomes dead.

  • Each line indicates the parent of a point. Lines have an arbitrary lifetime of a few ticks, and occupy the points they connect (so new points may not spawn on top of a line).

  • When a dead point has no lines it is cleaned up, and its point is no longer occupied.

The resulting behavior is somewhere between Conway’s Game of Life and white noise. Though each point operates independently, they tend to move together in groups. When two groups collide head on they tend to cancel each other out, killing most of both. When they meet while both heading in a common direction they tend to peacefully merge towards that direction.

Sometimes their world becomes so cluttered there’s hardly room to move. Sometimes a major coincidence of events leads to multiple groups canceling each other at once, opening up the world and allowing for an explosion of new growth.

Some groups spiral about a single point, sustaining themselves and defending from outside groups in the same movement. This doesn’t last for very long.

The performance of this visualization is not very optimized, and will probably eat up your CPU like nothing else. Most of the slowness comes from drawing the lines; since there’s so many individual small ones it’s quite cumbersome to do.

To check this project out locally:

git clone
git checkout v1

If you liked this post, consider checking out other posts in the series:
Next: Visualization 2