function Particle(x, y, splitCount) {
this.splitCount = splitCount;
this.pos = new p5.Vector(x, y);
this.vel = p5.Vector.random2D();
this.vel.mult(map(this.splitCount, 0, maxSplitCount, 5, 2));
if (this.age % 10 == 0 && this.splitCount > 0) {
allParticles.push(new Particle(this.pos.x, this.pos.y, this.splitCount - 1));
createCanvas(windowWidth, windowHeight);
for (let i = allParticles.length - 1; i > -1; i--) {
if (allParticles[i].vel.mag() < 0.01) {
allParticles.splice(i, 1);
if (allParticles.length > 0) {
let data = Delaunay.triangulate(
allParticles.map(function(pt) {return [pt.pos.x, pt.pos.y];})
for (let i = 0; i < data.length; i += 3) {
let particle1 = allParticles[data[i]];
let particle2 = allParticles[data[i + 1]];
let particle3 = allParticles[data[i + 2]];
if (particle1.pos.dist(particle2.pos) > distThresh ||
particle2.pos.dist(particle3.pos) > distThresh ||
particle1.pos.dist(particle3.pos) > distThresh) {
let particleColor = color(165 + particle1.age * 1.5, 360, 360);
particle1.pos.x, particle1.pos.y,
particle2.pos.x, particle2.pos.y,
particle3.pos.x, particle3.pos.y);
function mouseDragged() {
allParticles.push(new Particle(mouseX, mouseY, maxSplitCount));