xxxxxxxxxx
182
let easing = 0.05;
let paused = false;
let targetY, targetX;
let color1, color2;
let circs;
let gfx;
let num_circles;
let colors, bg;
let bg_pattern;
let bg_circs;
function drawShadow(b, g) {
if (b == 0) {
drawingContext.shadowOffsetX = 0;
drawingContext.shadowOffsetY = 0;
drawingContext.shadowBlur = 0;
drawingContext.shadowColor = color(0); //"black";
} else {
drawingContext.shadowOffsetX = 3;
drawingContext.shadowOffsetY = 3;
drawingContext.shadowBlur = b;
drawingContext.shadowColor = color(0); //"black";
}
}
function keyPressed() {
if (key === " ") paused = !paused;
}
function setup() {
randomSeed(2);
// chromotome - ducci_a
bg = "#863f52";
colors = ["#809498", "#d3990e", "#000000", "#ecddc5"];
createCanvas(1000, 1000);
gfx = createGraphics(width, height);
bg_pattern = 2; // 0: none, 1: center, 2: grid of pulsing
bg_circs = [];
circs = [];
let r = 250;
// rotators
num_circles = random(10, 350);
for (let i = 0; i < num_circles; i++) {
let c = color(255);
if (i == 349) c = color(255, 0, 255);
circs.push({
theta: i, //*TWO_PI/4,
r: r,
step: TWO_PI / int(random(128, 256)),
color: random(colors), //color(255)//random(20,255)
});
}
// bg
if (bg_pattern == 1) {
bg_circs.push({
x: width / 2,
y: height / 2,
max_r: r - 50,
min_r: random(0, 10),
r: (r - 50) / 2,
color: random(colors),
r_dir: true,
r_step_random: random([true, false]),
});
} else if (bg_pattern == 2) {
let pts = int(random(4, 20));
let offset = int(width / pts);
console.log(pts, offset);
for (let i = 0; i < pts - 1; i++) {
let x = i * offset;
for (let j = 0; j < pts - 1; j++) {
let y = j * offset;
bg_circs.push({
x: offset + i * offset,
y: offset + j * offset,
max_r: 30,
min_r: random(0, 10),
r: (r - 50) / 2,
color: random(colors),
r_dir: true,
r_step_random: random([true, false]),
});
}
}
}
let o = 10;
gfx.fill(color(0, 0, 0, 255));
gfx.rect(0, 0, o, height);
gfx.rect(0, 0, width, o);
gfx.rect(width - o, 0, o, height);
gfx.rect(0, height - o, width, o);
}
let disperse = true;
function draw() {
if (!paused) {
if (frameCount % 250 == 0) disperse = !disperse;
background(bg);
// drawShadow(map(ctr,0,250,2.0,0.0));
// if (disperse)
drawShadow(4);
// else
// drawShadow(0);
// bg circles
if (bg_pattern == 1 || bg_pattern == 2) {
push();
for (let i = 0; i < bg_circs.length; i++) {
let s = 1;
let c = bg_circs[i];
if (c.r_step_random) s = random(-2, 2);
noStroke();
fill(c.color);
circle(c.x, c.y, c.r);
if (c.r_dir) {
c.r += s;
if (c.r >= c.max_r) {
c.r = c.max_r;
c.r_dir = false;
}
} else {
c.r -= s;
if (c.r <= c.min_r) {
c.r = c.min_r;
c.r_dir = true;
}
}
}
pop();
}
translate(width / 2, height / 2);
for (let i = 0; i < circs.length; i++) {
let c = circs[i];
let x = c.r * cos(c.theta);
let y = c.r * sin(c.theta);
stroke(120);
strokeWeight(0.5);
// line(0, 0, x, y);
noStroke();
fill(c.color);
circle(x, y, 50);
c.theta += c.step;
if (disperse) {
if (random() > 0.8) {
c.r += random(-5.0, 5.0);
c.r = constrain(c.r, 150, 500);
}
} else {
if (c.r > 250) c.r--;
else if (c.r < 250) c.r++;
}
}
push();
drawShadow(0);
translate(-width / 2, -height / 2);
image(gfx, 0, 0);
pop();
}
}