Sin patria ni banderas, ahora vivo a mi manera; y es que me siento extranjero fuera de tus agujeros (Tercer movimiento: Lo de dentro, Extremoduro)

The technique I experimented with in this post is an endless source to obtain amazing images. It is called reaction-diffusion and simulates the evolution of a system where several substances interact chemically transforming into each other (reaction) and spreading out over a surface in space (diffusion). In my case there are just two substances in a 2D space and the evolution of system is simulated using the Gray-Scott algorithm which is ruled by several parameters that, once determined, can produce images like this one:

This article by Karl Sims, is a very clear and comprehensive explanation of the Gray-Scott algorithm. Briefly, the Gray-Scott model simulates the evolution of two substances, A and B in a two dimensional grid. In each cell of the grid, the substance A is added at a given feed rate `f`

. Then, both substances react following this rule: two particles of B convert a particle of A into a particle of B. To prevent *overpopulation*, B particles are killed at a given kill rate `k`

. In the diffusion phase, both substances spread out accross the cells of the grid at a given diffusion rates `D`

and _{a}`D`

. The diffusion is performed using a 2D Lapacian operator with a _{b}`3x3`

convolution matrix `L`

.

In the article you can find the equations that rule the system, which depend on the parameters described in the previous paragraph. To obtain all the images of this post, I maintained most of them always constant and just changed the following:

- Feed and kill rates (
`f`

and`k`

respectively) - The initial proportion of both substances A and B. I always started with A=0 in each cell and B=1 in some (small) amount of them selected randomly or according to some geometrical considerations (and inner circle or square, for example). I let you to try with your own ideas.

Sometimes the system converges and remains stable after a number of iterations. For example, these images are obtained iterating 5000 times:

Before converging you can obtain also nice patterns in between:

The variety of patterns is amazing: tessellations, lattices, caleidoscopic … some more examples:

I used again `Rcpp`

to iterate efficiently but now I tried `RcppArmadillo`

, a `C++`

library for linear algebra and scientific computing because it contains a class called *cube*, which is a 3D matrix that fits perfectly into a 2D grid where the 3rd dimension is the amount of particles A and B.

I like to share my code because I think it may serve as a source of inspiration to someone. You can find the code here with just one of the many configurations I tried to generate the previous images. It may serve you as a good starting point to explore you own ones. Let me know if you reach interesting places.

Happy New Year 2020.

#Load in libraries

library(Rcpp) #to iterate fast

# Import C++ code

sourceCpp(‘cpp_funcs.cpp’) ####FAILING CODE

Why fails? May you copy the log or clarify the error a bit more? Thanks!

I would love the R code.

Surely this will inspire something…

Thank you!

Very good. I’ve done an animation: https://thumbs.gfycat.com/SeveralIncomparableChupacabra-size_restricted.gif

Nice! Thank you!

Muy interesante

Muchas gracias 🙂