No interaction. Sometimes probing can take a while to find an interesting set of parameters
xxxxxxxxxx
const gridSize = 600;
const gmax = gridSize*gridSize;
let gridImage, initialized, tries, D;
let refSymmetry = true, symmetry;
function setup() {
createCanvas(windowWidth, windowHeight);
D = min (width,height);
gridImage = createImage(gridSize, gridSize);
gridImage.loadPixels();
this.focus();
generate()
}
function mousePressed() {
symmetry = undefined;
generate();
}
function keyTyped() {
if (key >= '3' && key <= '9') {
symmetry = int(key);
generate()
}
if (key.toUpperCase() == 'R') {
refSymmetry = !refSymmetry;
generate();
}
else if (key == "?") {
print(cpuVersion)
}
}
function generate() {
initialized = false;
tries = 0;
}
function draw() {
background(0);
if (!initialized) {
noStroke();
for (let i = 0; i < 20; i++) {
fill(0);
text (`Finding a good one. Try ${tries}.`, 10, 20);
tries++;
fill(255)
text (`Finding a good one. Try ${tries}.`, 10, 20);
cpuVersion.randomize(symmetry,refSymmetry);
if (!cpuVersion.isBad()) {
initialized = true;
cpuVersion.adjustScale();
//print (`nonzero:${cpuVersion.nonZero}, gridMax:${cpuVersion.gridMax}, countMax:${cpuVersion.countMax}, qCount:${cpuVersion.qCount}, parms: ${cpuVersion.parameters()}` );
return;
}
}
return;
}
cpuVersion.iterateBatch()
let grid = cpuVersion.grid;
let maxCount = 0;
for (let count of grid) maxCount = max(count, maxCount);
let logMax = log(maxCount+1)
let pixels = gridImage.pixels;
for (let i = 0; i < grid.length; i++) {
let j = i*4;
pixels[j] = pixels[j+1] = pixels[j+2] = log(grid[i]+1) / logMax*255
pixels[j+3] = 255;
}
gridImage.updatePixels();
image(gridImage, (width-D)/2, (height-D)/2, D, D)
}