let wfs = [];
let timeSinceStart = 0;
let timeOfLast = -10000;
let frequency; // Per Second
let waveSpeed; // Pixels per Second
let sourcePos;
function setup() {
sketchesCreateCanvas(400, 400);
noFill();
sourcePos = createVector(0, 0);
frequencySlider = createSlider(0, 60, 5);
waveSpeedSlider = createSlider(0, 400, 80);
frequencySlider.label("Frequency");
waveSpeedSlider.label("Wavespeed")
}
function draw() {
background(220);
timeSinceStart += deltaTime / 1000;
frequency = frequencySlider.value();
waveSpeed = waveSpeedSlider.value();
let sourceDelta = createVector(mouseX, mouseY).sub(sourcePos);
sourceDelta.limit(waveSpeed * deltaTime / 1000)
sourcePos.add(sourceDelta);
if (timeSinceStart - timeOfLast > 1 / frequency) {
append(wfs, new Wavefront(sourcePos.x, sourcePos.y, waveSpeed));
timeOfLast = timeSinceStart;
}
for (let i = 0; i < wfs.length; i++) {
wfs[i].update();
if (wfs[i].r > 300) {
wfs.splice(i, 1);
i--;
}
}
}
class Wavefront {
constructor(x, y, c) {
this.x = x;
this.y = y;
this.c = c;
this.r = 0;
}
update() {
stroke(0, 300 - this.r);
circle(this.x, this.y, this.r * 2);
this.r += this.c * deltaTime / 1000;
}
}
Return to Sketch