Move the mouse around with the button pressed down. Move faster or slower to affect the stroke size and spatter. Press 'E' to erase the image.
xxxxxxxxxx
var ox, oy, nx, ny, spd, spd0, spd00, spd00, spd000, spd0000;
var angle = 0, oldAngle = 0, angleDiff, weight, theCanvas;
function setup() {
theCanvas = createCanvas(windowWidth, windowHeight);
colorMode(HSB,360,100,100,1);
noFill();
initSketch();
}
function draw() {
}
function initSketch() {
background(240);
ox = undefined;
oy = undefined;
}
function mouseClicked() {
weight = 24;
spd0 = 1;
spd00 = 1;
spd000 = 1;
spd0000 = 1;
ox = undefined;
oy = undefined;
}
function mouseDragged() {
var adj = 0;
var minWeight = 2;
var maxWeight = 30;
var weightIncrement = 4;
var num,size,distance;
if (typeof ox === 'undefined') {
ox = mouseX;
oy = mouseY;
}
nx = mouseX;
ny = mouseY;
spd = dist(ox, oy, nx, ny) ;
avgSpd = (spd + spd0 + spd00 + spd000 + spd0000) / 5;
if (between(avgSpd,1,2)) { weight += (weightIncrement * 2) }
if (between(avgSpd,3,5)) { weight += (weightIncrement) }
if (between(avgSpd,6, 40)) { weight -= weightIncrement }
if (between(avgSpd,61,999)) { weight -= (weightIncrement * 2) }
if(avgSpd < 1) { weight += 1 }
weight = Math.max(weight, minWeight);
weight = Math.min(weight, maxWeight);
stroke(0, 250);
strokeWeight(weight);
line(ox, oy, nx, ny);
// spatter:
angle = atan2(ny - oy, nx - ox);
angleDiff = abs(angle, oldAngle);
push();
noStroke();
fill(0,0.5);
num = Number(angleDiff > 1);
distance = spd * random(1);
for(let i = 0; i < 4; i++) {
size = random(0.5, distance / 8);
ellipse(wobble(nx, distance), wobble(ny, distance), size, size);
}
pop();
// Remember values next time:
oldAngle = angle;
ox = nx;
oy = ny;
spd0000 = spd000;
spd000 = spd00;
spd00 = spd0;
sped0 = spd;
}
function keyPressed() {
// (E)rase:
if (keyCode === 69) {
initSketch();
}
// (S)ave
if (keyCode === 83) {
var title = window.title || 'untitled';
var filename = title + '-' + Date.now();
saveCanvas(theCanvas, filename, 'PNG');
}
// (B)lur
if (keyCode === 66) {
filter(BLUR,4);
}
}
function wobble(num, mag) {
return random(0 - mag, mag) + num;
}
function between(num, a, b) {
return(num >= a && num <= b);
}