xxxxxxxxxx
/******************
Code by Vamoss
Original code link:
https://openprocessing.org/sketch/1333892
Author links:
http://vamoss.com.br
http://twitter.com/vamoss
http://github.com/vamoss
******************/
const sides = 6;
var size = 15;
var colors;
var colorCount = 0;
var pos = {};
var dir = 1;
var radius = 5;
var angle = 0;
function setup() {
const size = min(windowWidth, windowHeight) * 0.75;
createCanvas(size, size);
background(0);
strokeWeight(2);
colors = [color("#2b2244"), color("#581845"), color("#900C3F"), color("#C70039"), color("#e32c36"), color("#FF5733"), color("#FFC30F"), color("#24fffb"), color("#2b2244")];
pos = {x: width/2, y: height/2};
prevPos = {x: pos.x, y: pos.y};
}
function draw() {
size -= 0.05;
if(size<=0) noLoop();
angle += 1/radius*dir;
let prevPosX = pos.x;
let prevPosY = pos.y;
pos.x += cos(angle) * radius;
pos.y += sin(angle) * radius;
//lerp array of colors
colorCount += noise(frameCount/1000)/200;
var col = lerpColors(colorCount%1, colors);
//draw
for(var a = 0; a < TWO_PI; a += TWO_PI/sides){
push();
translate(width/2, height/2);
rotate(a);
translate(-width/2, -height/2);
strokeWeight(size);
noFill();
stroke(col);
line(prevPosX, prevPosY, pos.x, pos.y);
pop();
}
//change direction
if(pos.x < (size+10) || pos.x > width-(size+10) || pos.y < (size+10) || pos.y > height-(size+10)){
angle += PI * dir;
}else{
if(random() < 0.05) dir *= -1;
if(random() < 0.05) radius = random(5, 8);
}
}
function keyPressed(){
//saveCanvas();
}
/**
* lerp color from multiple color array
* param {Integer} [t] lerp factor from 0 to 1
* param {Array} [[color, color]] colors to lerp, minimum 2 colors in array
*/
function lerpColors(t, colors)
{
let i = Math.floor(t*(colors.length-1));
if(i < 0) return colors[0];
if(i >= colors.length-1) return colors[colors.length-1];
let percent = (t - i / (colors.length-1)) * (colors.length-1);
return color(
colors[i]._getRed() + percent*(colors[i+1]._getRed()-colors[i]._getRed()),
colors[i]._getGreen() + percent*(colors[i+1]._getGreen()-colors[i]._getGreen()),
colors[i]._getBlue() + percent*(colors[i+1]._getBlue()-colors[i]._getBlue())
)
}