Gray Scott Reaction Diffusion Simulation

The source code is available on GitHub.

from the Reaction Diffusion System Wikipedia article: Reaction–diffusion systems are mathematical models which correspond to several physical phenomena: the most common is the change in space and time of the concentration of one or more chemical substances: local chemical reactions in which the substances are transformed into each other, and diffusion which causes the substances to spread out over a surface in space.

If that sounds like gibberish, just know that it's an algorithm for modeling the processes that create lots of natural patterns. To understand how the simulation works, imagine that you have a petri dish containing two chemicals: A and B. Each step of the simulation, some chemical B interacts with chemical A and catalyzes it, converting into more chemical B. Also, more chemical A is fed into the petri dish at a constant rate and Chemical B is removed from the petri dish at a constant rate. That's it. Depending on how fast you add more chemical A and how fast you remove excess chemical B a multitude of different patterns will appear.

Click here for more info on cool patterns that appear in nature.

The 'Soliton Collapse' setting

The 'Soliton Collapse' setting


The 'Brain Coral' setting

The 'Brain Coral' setting


Running The Visualizer

You'll need to have Rust and cargo installed. Then, run cargo run --release in you terminal of choice. Click and drag around to seed the reaction and interact with it.

Seeing Different Reactions

Right now, changing the default interaction is somewhat inconvenient, but I've provided a few presets that you can manually enter. Just update line 33 in main.rs

// src/main.rs:33
// Change the preset to anything exported from `model_presets`
const CURRENT_MODEL: (f32, f32) = model_presets::SOLITON_COLLAPSE;

The options available are:

Preset NameFeed RateRemoval Rate
BRAIN_CORAL0.05450.0620
FINGERPRINT0.05450.0620
MITOSIS0.03670.0649
RIPPLES0.01800.0510
SOLITON_COLLAPSE0.02200.0600
U_SKATE_WORLD0.06200.0610
UNDULATING0.02600.0510
WORMS0.07800.0610

You can also enter a tuple of your own values here if you prefer.