fractalkitty looking for math? fractalkitty.com

codepen challenges

currentlyPaisley

#random#trig#interactive#animation#tiling#spiral#codepen-challenge

pArrayXpArrayYpArrayTpArraySalphpaisleyDroppaisleyOnepaisleyTwopaisleyThreepaisleyArraypaisleyLoop

let pArrayX = [];
let pArrayY = [];
let pArrayT = [];
let pArrayS = [];
let n = 40;
let alph = 200;
redF = 60;
function setup() {
	createCanvas(windowWidth, windowHeight);
	noFill();
	angleMode(DEGREES);
	paisleyArray();
}

function draw() {
	t = frameCount / 200;
	redF = abs(200 * sin(t * 50));
	translate(width / 2, height / 2);
	background(50 + redF, 225, 245);
	paisleyLoop();
}

function paisleyDrop(r) {
	beginShape();
	for (let i = 270; i > 90; i--) {
		a = r * sin(i);
		b = r * cos(i);
		vertex(a, b);
	}
	for (let i = 270; i < 450; i++) {
		a = 2 * r + r * sin(i);
		b = r * cos(i);
		vertex(a, b);
	}
	for (let i = 90; i < 270; i++) {
		a = r + 2 * r * sin(i);
		b = 2 * r * cos(i);
		vertex(a, b);
	}
	endShape(CLOSE);
}
function paisleyOne(r) {
	stroke(0 + redF, 90, 100);
	strokeWeight(3);
	fill(20 + redF, 170, 190, alph);
	paisleyDrop(100);
	fill(80 + redF, 240, 270, alph);
	push();
	translate(5, -20);
	scale(1.15, 1.1);
	paisleyDrop(90);
	pop();
	noFill();
	strokeWeight(5);
	stroke(10 + redF, 90, 100);
	circle(212, -30, 160);
	push();
	translate(212, -30);
	for (let i = 0; i < 12; i++) {
		c = 80 * sin(30 * i);
		d = 80 * cos(30 * i);
		circle(c, d, 40);
	}
	fill(10 + redF, 90, 100, alph);
	circle(0, 0, 100);
	pop();
	fill(10 + redF, 90, 100, alph);
	circle(140, -150, 80);
	circle(60, -160, 50);
	circle(7, -150, 30);
	circle(-30, -135, 20);
}

function paisleyTwo() {
	stroke(255);
	strokeWeight(1);
	fill(10 + redF, 90, 100, alph);
	paisleyDrop(100);
	push();
	translate(100, 0);
	noStroke();
	for (let i = 0; i < 9; i++) {
		tx = 90 * sin(90 + i * 13) - i * 10;
		ty = 135 * cos(90 + i * 13);
		fill(80 + redF, 240, 270, alph);
		circle(tx + 10, ty, 140 - i * 12);
		fill(10 + redF, 90, 100, alph);
		circle(tx + 25, ty - 5, 120 - (i - 1) * 9);
	}
	pop();
}

function paisleyThree() {
	stroke(10 + redF, 90, 100);
	strokeWeight(3);
	beginShape();
	noFill();
	r = 100;
	for (let i = 0; i < 18; i++) {
		a = r * sin(270 - i * 10);
		b = r * cos(270 - i * 10);
		vertex(a, b);
		circle(a, b, 20);
	}
	for (let i = 0; i < 18; i++) {
		a = 2 * r + r * sin(270 + i * 10);
		b = r * cos(270 + i * 10);
		vertex(a, b);
		circle(a, b, 20);
	}
	for (let i = 0; i < 36; i++) {
		a = r + 2 * r * sin(90 + i * 5);
		b = 2 * r * cos(90 + i * 5);
		vertex(a, b);
		circle(a, b, 20);
	}
	endShape(CLOSE);
	fill(255, 255, 255, alph);
	paisleyDrop(100);
}
function paisleyArray() {
	pArray = [];
	for (let i = 0; i < n; i++) {
		pArrayX[i] = random(-width / 2, width / 2);
		pArrayY[i] = random(-height / 2, height / 2);
		pArrayT[i] = floor(random(0, 4));
		pArrayS[i] = random(0.05, 1.2);
	}
}

function paisleyLoop() {
	for (let i = 0; i < n; i++) {
		push();
		rotate(t * 100 + pArrayX[i] + pArrayY[i]);
		translate(
			pArrayX[i] + 100 * sin(t * pArrayX[i]),
			pArrayY[i] + 100 * cos(t * pArrayY[i])
		);
		scale(pArrayS[i], pArrayS[i]);
		if (pArrayT[i] === 0) {
			paisleyOne();
		} else if (pArrayT[i] === 1) {
			paisleyTwo();
		} else if (pArrayT[i] === 2) {
			paisleyThree();
		}
		pop();
	}
}

function mousePressed() {
	if (n < 100) {
		for (let i = n; i < n + 5; i++) {
			pArrayX[i] = random(-width / 2, width / 2);
			pArrayY[i] = random(-height / 2, height / 2);
			pArrayT[i] = floor(random(0, 4));
			pArrayS[i] = random(0.05, 1.2);
		}
		n += 5;
	}
	if (n >= 90) {
		pArray = [];
		n = 10;
		paisleyArray();
	}
}