xxxxxxxxxx
56
let particleArray = [];
let prevArray = [];
function setup() {
// setup canvas
createCanvas(400, 400);
background(237, 183, 5);
// drop shadow for particle trails
drawingContext.shadowOffsetX = 2;
drawingContext.shadowOffsetY = 2;
drawingContext.shadowBlur = 10;
drawingContext.shadowColor = "black";
// particle settings
ellipseMode(CENTER);
fill("blue");
blur(2);
noStroke();
// array to store particle data
for (let i = 0; i < 20; i++) {
let x = random(width);
let y = random(height);
let weight = int(random(1, 10));
let angle = random(TWO_PI);
let radius = random(1, 10);
particleArray.push({ x, y, weight, angle, radius });
prevArray.push({x, y})
}
}
function draw() {
for (let i = 0; i < particleArray.length; i++) {
let { x, y, weight, angle, radius } = particleArray[i];
ellipse(x, y, weight, weight);
particleArray[i].x = x + radius * cos(angle);
particleArray[i].y = y + radius * sin(angle);
particleArray[i].angle += 0.02;
particleArray[i].radius += 0.01;
if (i != 0) {
let { x: prevX, y: prevY } = prevArray[i - 1];
let centerX = (x + prevX) / 2;
let centerY = (y + prevY) / 2;
let distance = dist(x, y, prevX, prevY);
let startAngle = atan2(y - centerY, x - centerX);
let endAngle = atan2(prevY - centerY, prevX - centerX);
noFill();
stroke("blue");
strokeWeight(weight);
arc(centerX, centerY, distance, distance, startAngle, endAngle);
}
}
}