Viz 1
Using clojurescript and quil to generate interesting visuals
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.
Published 2018-11-12
Hi! My name is Brian and I'm available for short-term remote contract work. Whether you need a consultant to guide you through a difficult problem or another pair of hands to smash out some code, I can do it all. Learn more about me and my skillset by browsing around this site, head over to my resume to find my actual work history, and shoot me an email when you're ready to get in touch.