xxxxxxxxxx
112
var grid, next;
const dA = 1, dB = 0.5;
var kill = 0.062775, feed = 0.031025;
//Change only when random points are applied.
var start = 1;
/*
Different seeds for different patterns.
kill: 0.0579 feed: 0.0227
kill: 0.06195 feed: 0.0449
kill: 0.062775 feed: 0.031025
kill: 0.058225 feed: 0.03755
kill: 0.055875 feed: 0.02232
kill: 0.0555 feed: 0.0291
kill: 0.0641 feed: 0.04677500
kill: 0.06095 feed: 0.04325000
*/
function setup(){
createCanvas(400, 400);
pixelDensity(1);
colorMode(HSB);
grid = [];
next = [];
for(var i = 0; i < width; i++){
grid[i] = [];
next[i] = [];
for(var j = 0; j < height; j++){
grid[i][j] = { a: 1, b: 0};
next[i][j] = { a: 1, b: 0};
}
}
for(var x = 0; x < start; x++){
//Apply tempX and tempY to the loops for multiple diffusions.
var tempX = floor(random(30, width -30));
var tempY = floor(random(30, height -30));
for(var k = 190; k < 211; k++){
for(var l = 190; l < 211; l++){
grid[k][l].b = 1;
}
}
}
}
function draw(){
background(255);
for(var i = 1; i < width - 1; i++){
for(var j = 1; j < height - 1; j++){
var a = grid[i][j].a;
var b = grid[i][j].b;
//Uncomment the next two line for a full show of the different diffusions.
//kill = map(i, 0, width, 0.055, 0.065);
//feed = map(j, 0, height, 0.05, 0.02);
next[i][j].a = a + (dA * laplace(true, i, j) - (a * b * b) + feed * (1 - a));
next[i][j].b = b + (dB * laplace(false, i, j) + (a * b * b) - (kill + feed) * b);
}
}
loadPixels();
for(var k = 0; k < width; k++){
for(var l = 0; l < height; l++){
var index = (k + l * width) * 4;
var c = 300-abs((next[k][l].a - next[k][l].b) * 255);
pixels[index + 0] = c;
pixels[index + 1] = c;
pixels[index + 2] = c;
pixels[index + 3] = 255;
}
}
updatePixels();
swap();
}
function swap(){
var temp = grid;
grid = next;
next = temp;
}
function laplace(isA, i, j){
var sum = 0;
if(isA){
sum += grid[i][j].a * -1;
sum += grid[i - 1][j].a * 0.2;
sum += grid[i][j - 1].a * 0.2;
sum += grid[i + 1][j].a * 0.2;
sum += grid[i][j + 1].a * 0.2;
sum += grid[i - 1][j - 1].a * 0.05;
sum += grid[i + 1][j - 1].a * 0.05;
sum += grid[i - 1][j + 1].a * 0.05;
sum += grid[i + 1][j + 1].a * 0.05;
}else{
sum += grid[i][j].b * -1;
sum += grid[i - 1][j].b * 0.2;
sum += grid[i][j - 1].b * 0.2;
sum += grid[i + 1][j].b * 0.2;
sum += grid[i][j + 1].b * 0.2;
sum += grid[i - 1][j - 1].b * 0.05;
sum += grid[i + 1][j - 1].b * 0.05;
sum += grid[i - 1][j + 1].b * 0.05;
sum += grid[i + 1][j + 1].b * 0.05;
}
return sum;
}