keyboard_backspace back

Spinny

Spins. Started out in After Effects, then built in Processing. Now ported to p5.js. Click to generate new colours.


let speed;
let weight;
let iterations;
let spacing;
let diagonal;

let colorA;
let colorB;

let canvasDiv = document.getElementById('p5-sketch');
let canvasElement;

function setup() {
	let canvas = createCanvas(canvasDiv.scrollWidth, canvasDiv.scrollHeight);
	canvas.parent('#p5-sketch');
	frameRate(60);
	colorMode(HSB, 255);
	speed = 0.04;
	iterations = 32;

	colorA = color(random(255), random(255), random(255));
	colorB = color(random(255), random(255), random(255));

	diagonal = Math.sqrt(Math.pow(canvasDiv.scrollWidth, 2) + Math.pow(canvasDiv.scrollHeight, 2));
	spacing = diagonal / (iterations - 1);
	weight = (spacing / 2) + 1;

	canvasElement = document.getElementsByTagName('canvas')[0];
}

function draw() {
	noFill();
	background(colorB);
	for (var i = 1; i < iterations; i++) {
		push();
		translate(width / 2, height / 2);
		rotate(radians(speed * (frameCount + 0) * (iterations - i)));
		stroke(lerpColor(colorA, colorB, (i / iterations)));
		strokeWeight(weight);
		strokeCap(SQUARE);
		drawArc(i * spacing);
		pop();
	}
}

function windowResized() {
	resizeCanvas(canvasDiv.scrollWidth, canvasDiv.scrollHeight);
	diagonal = Math.sqrt(Math.pow(canvasDiv.scrollWidth, 2) + Math.pow(canvasDiv.scrollHeight, 2));
	spacing = diagonal / (iterations - 1);
	weight = (spacing / 2) + 1;
}

function drawArc(size) {
	arc(0, 0, size, size, PI, 2 * PI);
}

function mousePressed(target) {
	if (target.target === canvasElement) {
		colorA = color(random(255), random(255), random(255));
		colorB = color(random(255), random(255), random(255));
		return false;
	}
}