xxxxxxxxxx
function setup() {
createCanvas(windowWidth, windowHeight);
background(100);
frameRate(20);
}
var lastRed = 255;
var lastGreen = 0;
var lastBlue = 0;
var colSpeed = 6;
var lastJump = 0;
function draw() {
var i = 0;
var strokeLength = 5;
var iMax = 100;
var startPointX = -30;
var startPointY = -30;
var lastX = startPointX;
var lastY = startPointY;
var speedX = 100;
var speedY = 100;
strokeWeight(5);
var ran = Math.random();
if (ran > 0.9) {
colSpeed = 17;
lastJump = frameCount;
} else if ((frameCount - lastJump) > 15) {
colSpeed = 6
}
for (i = 0; i < iMax; i++) {
var colourIndex = frameCount*0.001 + i/iMax;
var c = getRainbowState(colourIndex - Math.floor(colourIndex), colSpeed);
stroke(c[0], c[1], c[2]);
line(lastX, lastY, lastX + speedX, lastY + speedY);
lastX = lastX + speedX * Math.random();
lastY = lastY + speedY * Math.random();
}
}
function getRainbowState(input, colourSpeed) {
if (input === 0 || input === 1) {
lastRed = 255;
lastGreen = 0;
lastBlue = 0;
}
if (input < 0.16666) {
// increasing green
lastGreen += colourSpeed;
if (lastGreen > 255) {
lastGreen = 255;
colourState = 1;
}
} else if (input < 0.3333) {
lastRed -= colourSpeed;
if (lastRed < 0) {
lastRed = 0;
}
} else if (input < 0.5) {
// increasing green
lastBlue += colourSpeed;
if (lastBlue > 255) {
lastBlue = 255;
}
} else if (input < 0.66666) {
// increasing green
lastGreen -= colourSpeed;
if (lastGreen > 255) {
lastGreen = 255;
}
} else if (input < 0.8333) {
lastBlue -= colourSpeed;
if (lastBlue < 0) {
lastBlue = 0;
}
} else if (input < 1) {
lastRed += colourSpeed;
if (lastRed < 0) {
lastRed = 0;
}
}
return [lastRed, lastGreen, lastBlue]
}
function getRandomColour() {
return color(255*Math.random(), 255*Math.random(), 255*Math.random());
}