createCanvas(w, h, WEBGL);
ortho(-w / 2, w / 2, -h / 2, h / 2, -8000, 8000);
createVector(4, 85, 191),
createVector(3, 90, 166),
createVector(4, 157, 217),
createVector(242, 203, 57),
createVector(242, 159, 5),
for (let i = 0; i < w / d; i++) {
let sx = sin((TWO_PI / (w / d)) * i) * (w / 3);
let sy = cos((TWO_PI / (w / d)) * i) * (w / 3);
rotateY(frameCount / 400);
gradate(d, 100, 0.5, 0.02, 250, c[2], c[(i + 1) % c.length]);
function gradate(wid, num, ave, disp, alpha, color1, color2) {
const max = 1 / sqrt(TWO_PI * disp);
for (let i = 0; i < num; i++) {
let rate = map(i, 0, num, 0, 1);
let density = exp(-pow(rate - ave, 2) / (2 * disp)) / sqrt(TWO_PI * disp);
let color = createVector(
map(i, 0, num, color1.x, color2.x),
map(i, 0, num, color1.y, color2.y),
map(i, 0, num, color1.z, color2.z)
rotateY((i * TWO_PI) / num + frameCount / 10);
stroke(color.x, color.y, color.z, (alpha * density) / max);
line(0, i * 10, wid, i * sin(i / num) * 10);