For this simulation a 3-variable implementation of the Perlin noise algorithm is used to generate a vector field on the canvas which acts upon thousands of particles. The inputs for the algorithm are two spacial dimensions (x,y) corresponding to position on the canvas and a third variable z which increments with time. The output is a unit vector that points in a random direction varying over time, the particles subject to the vector field in turn trace out beautiful chaotic paths.
The special feature of the algorithm is that it produces a smooth randomness so that adjacent cells do not point in completely opposite directions.
Click options above to experiment with different visual parameters controlling the simulation.
Inspired by Daniel Shiffman's Coding Train tutorial.