xxxxxxxxxx
const w = 640;
const brushRadius = 25;
let grid = new Uint8Array(w * w);
let zoom;
function setup() {
const m = min(windowWidth, windowHeight);
createCanvas(m, m);
zoom = w / m;
pixelDensity(zoom);
loadPixels();
grid = grid.map((v) => (v = floor(random(256))));
}
function draw() {
const newGrid = new Uint8Array(grid);
for (let y = 1; y < w - 1; y++) {
for (let x = 1; x < w - 1; x++) {
const i = x + y * w;
const oldValue = grid[i];
const sum = oldValue
+ grid[i - w] * 2
+ grid[i - 1]
+ grid[i + 1]
+ grid[i + w]
+ grid[i - 1 - w]
+ grid[i + 1 - w]
+ grid[i - 1 + w]
+ grid[i + 1 + w] ;
const average = floor(sum / 10);
const newValue = (average + 1) & 0xff;
newGrid[i] = newValue;
pixels[i * 4 + 3] = newValue > oldValue ? 0 : 255;
}
}
grid = newGrid;
updatePixels();
}
function mouseDragged() {
for (let dy = -brushRadius; dy <= brushRadius; dy++) {
for (let dx = -brushRadius; dx <= brushRadius; dx++) {
if (dx ** 2 + dy ** 2 > brushRadius ** 2) continue;
const x = floor(mouseX * zoom + dx);
const y = floor(mouseY * zoom + dy);
if (0 <= x && x < w && 0 <= y && y < w)
grid[x + y * w] = random(256);
}
}
}