summaryrefslogtreecommitdiff
path: root/_posts/2018-11-12-viz-1.md
blob: b04b737da0eaa662d29662ee2cc91c60a701db43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
---
title: >-
    Visualization 1
description: >-
    Using clojurescript and quil to generate interesting visuals
series: viz
git_repo: https://github.com/mediocregopher/viz.git
git_commit: cb3d9d871d72b4f4487d175e73f0c30041963c42
---

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.

<!--<script src="/assets/viz/1/js/main.js"></script>-->
<script src="/assets/viz/1/goog/base.js"></script>
<script src="/assets/viz/1/cljs_deps.js"></script>
<script>goog.require("viz.core");</script>
<p align="center"><canvas style="width:100%;" id="viz"></canvas></p>

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).

* 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. When a dead point's line is cleaned up so is it.

The resulting behavior is somewhere between [Conway's Game of
Life](https://en.wikipedia.org/wiki/Conway%27s_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.