63 lines, 5 of them comments ยท 634 tokens, written in 7 seconds for $0.0065


 1  let dots = [];
 2  let numDots = 80;
 3  
 4  function setup() {
 5    createCanvas(600, 600);
 6    angleMode(DEGREES);
 7    colorMode(HSB, 360, 100, 100, 100);
 8  
 9    for (let i = 0; i < numDots; i++) {
10      let radius = random(40, 260);
11      let angle = random(0, 360);
12      let speed = random(0.2, 1.2) * (random() < 0.5 ? 1 : -1);
13      let hue = random(0, 360);
14      dots.push({ radius, angle, speed, hue });
15    }
16  
17    background(0);
18  }
19  
20  function draw() {
21    // Faint fade for trailing effect
22    noStroke();
23    fill(0, 0, 0, 10);
24    rect(0, 0, width, height);
25  
26    translate(width / 2, height / 2);
27  
28    // Draw central glow
29    noStroke();
30    for (let r = 80; r > 0; r -= 2) {
31      fill(220, 40, map(r, 80, 0, 10, 100), 20);
32      ellipse(0, 0, r * 2);
33    }
34  
35    // Update and draw orbiting dots
36    for (let d of dots) {
37      d.angle += d.speed;
38      let x = cos(d.angle) * d.radius;
39      let y = sin(d.angle) * d.radius;
40  
41      // Trail glow
42      noStroke();
43      for (let r = 10; r > 0; r -= 2) {
44        fill(d.hue, 80, 100, map(r, 10, 0, 20, 100));
45        ellipse(x, y, r);
46      }
47    }
48  }
49  
50  function keyPressed() {
51    // Press any key to regenerate system
52    if (key) {
53      dots = [];
54      for (let i = 0; i < numDots; i++) {
55        let radius = random(40, 260);
56        let angle = random(0, 360);
57        let speed = random(0.2, 1.2) * (random() < 0.5 ? 1 : -1);
58        let hue = random(0, 360);
59        dots.push({ radius, angle, speed, hue });
60      }
61      background(0);
62    }
63  }