/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.oPjL5fdhrWr/rev.28 * * authors: * GoToLoop * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /** * Pulsating Boxes (v3.30) * by Jam131 (2014/Jan) * mod GoToLoop * * forum.processing.org/two/discussion/2674/ * changing-color-of-each-shape-in-an-iteration * * studio.processingtogether.com/sp/pad/export/ro.9A9O52aqsIjdx/latest */ static final int DIM = 050, RAD = DIM >> 1; static final int STEP = 3, COLORS = 0100; Pulse[] pulses; void setup() { size(960, 480); frameRate(60); smooth(4); noCursor(); strokeWeight(5); colorMode(HSB, COLORS, 1, 1); rectMode(CENTER); ellipseMode(CENTER); pulses = createPulses(); } Pulse[] createPulses() { // for rectMode(CENTER)!!! final int cols = width/DIM, rows = height/DIM; final Pulse[] boxes = new Pulse[rows*cols]; for (int y = 0; y != rows; ++y) for (int x = 0; x != cols; ++x) boxes[y*cols + x] = new Pulse(x*DIM + RAD, y*DIM + RAD); return boxes; } void shuffleColors() { for (Pulse p: pulses) p.randColor(); } void draw() { //clear(); // Java background(0); // JS final float diam = DIM * abs(sin(radians(frameCount*STEP))); if (diam < 1e-2) shuffleColors(); //frame.setTitle("Diam: " + nf(diam, 2, 2)); // Java only! for (Pulse p: pulses) p.display(diam); fill(0, 030); stroke(-1); ellipse(mouseX, mouseY, DIM + diam*20, DIM + diam*20); ellipse(pmouseX, pmouseY, DIM + diam*10, DIM + diam*10); fill(-1); noStroke(); rect(mouseX, mouseY, DIM/1.3, DIM/1.3); } class Pulse { final short x, y; color c; Pulse(int px, int py) { x = (short) px; y = (short) py; randColor(); } void randColor() { // for colorMode(HSB)!!! c = color(random(COLORS), 1, 1); } void display(float diam) { fill(c); rect(x, y, diam, diam); } String toString() { return "[ " + x + ", " + y + " ]"; } }