So basically we have a simulation where each of n different species has a weight of attraction/repulsion for each other species. This is, by itself, enough to generate some pretty organic behavior!
So basically we have a simulation where each of n different species has a weight of attraction/repulsion for each other species. This is, by itself, enough to generate some pretty organic behavior!
It started off with a neat grow of blocks and just sort of grew from there–as these things seem wont to do.
This is another one that really benefits from the animation, but it’s neat enough to see each simulation done.
Try playing with the settings. This one looks like a game of Pick Up Sticks.
Genuary 2026.10: Polar coordinates did the transparency thing, but … let’s do it again!
This is one that really stands out when it’s animated.
Split a polygon into triangles and then recursively split those triangles over and over again!
A Bauhaus style poster.
One line… that repeatedly splits, albeit without (mostly) crossing itself.
Fractal trees GO!
splitChance controls how quickly the line branchesminChildren / maxChildren controls branchingangleRange is how many radians the new branches can change byrandomizeAngles controls if child angles are random/evenly spacedspacing is roughly how spread out the tree ispauseOnResetFor / stopOnReset controls what happens when a tree is donecolorMode changes drawing colorsanchor changes where the tree startsIt does get a bit sluggish, especially if you have a high number of children.
I’m… not really sure where I was going with this one. 😄
Basically, 16x16 tiny sketches that slide around like a sliding block puzzle. Although with how chaotic some of the simulations are, it’s not always easy to see.
I feel like the most unexpected of paths is Langton’s Ant!.
Okay, it’s fairly expected. And I’ve even done it before. Been a while though.
Anyways, here we go!
In a nutshell, you have a grid with N possible values (the length of the rule string). For each pattern, when the ‘ant’ walks on that cell, the value in incremented by one and you will turn according to these rules:
R turn right (90° or 60° in hex)L turn left (same)S turn right 120° in hex mode (nothing in square)M turn left 120° in hex modeU turn 180° in hex modeN above), do nothing/go straightThis ends up with some really interesting behavior for such a short ruleset. Langton’s Ant (LR, the default) is definitely an interesting one. For 10,000 ticks, you get chaotic behavior… and then suddenly it stabilizes!
Here are some interesting patterns:
You can also do some interesting things with multiple ants (they’ll spawn in a circle):
The modes are:
pauseMode controls when the simulation will stop (note: will always pause at width * height * 100 tiles)
n-tiles will pause when the tile count is width * height (no matter where they are)one-at-edge will stop when each cell is 1 pixel and any ant reaches the edge of the imageall-at-edge will only stop when all ants reach the edgeno-pause will never pause (this can get really laggy eventually)centerMode is how the displayed part of the simulation will be centered
origin will stay centered at 0,0bounds will center on the middle of the current overall boundsants will average the x,y of all antstiles will average the x,y of all tilesmouse will allow some mouse control; left click and drag to move, right click (in theory) to resetWallpaper group. There are only 17 ways to cover a plane with a repeating pattern, choose your favourite on this page: Wallpaper group
This is a great article about Classifying Symmetries that says there are actually 35 tiling patterns!
List of planar symmetry groups is another Wikipedia page with a good summary of the wallpaper group.
I spent waaaaay too long on this one.
group is the 17 groups mentionedsubGroup is horizontal or vertical for some of the abovecellType is the shape of each cellcellStyle is what to fill them withdebugDrawOne shows what one tile looks likedebugDisplay prints what random values were selectedpauseBuffer is useful for pausing the generation (although if any of the others are random they will keep changing)Not all of the groups and cell types are perfectly compatible. In fact, probably half or more aren’t. But they still produce something, and I think that’s pretty cool!
Order vs Disorder
So I have two kinds of agents: Order, which always moves in straight lines and Chaos which… doesn’t!
Settings:
updateRate is how fast it runsminAgentCount will spawn agents until you reach this numbermaxAgentCount will kill off agents until you’re under this numberdieOfOldAge will kill off old agentsmaxAge is the longest an agent can lastagentRatio of 0 is all order and 1 is all chaosspawnRate is how often an agent will spawn a new agent (of the same kind)resetPercent is how much of the screen can be full before resettingpauseOnReset will pause on a reset to allow downloading! (change any setting include this one to unpause)