random-walk
This is random-walk
by tomonari takahashi
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/p5.js/0.3.3/p5.min.js"></script>
JavaScript
var koku;
var normal;
function makeKokuRandom(from, to) {
return (random(from, to) + random(from, to) + random(from, to) + random(from, to) + random(from, to)) / 5;
}
function makeRandom(from, to) {
return random(from, to);
}
function setup() {
createCanvas(500, 300);
koku = new Walker(width, height, makeKokuRandom);
normal = new Walker(width, height, makeRandom);
frameRate(60);
}
function draw() {
background(50);
koku.run();
normal.run();
}
var Walker = function(wWidth, wHeight, randomFunc) {
this.lineLength = 20;
this.makeRandom = randomFunc;
this.wWidth = wWidth;
this.wHeight = wHeight;
this.v = 0;
this.r = 0;
this.x = [];
this.y = [];
var initPositionX = randomFunc(0, wWidth);
var initPositionY = randomFunc(0, wHeight);
for (var i = 0; i < this.lineLength; i++) {
this.x[i] = initPositionX;
this.y[i] = initPositionY;
}
};
Walker.prototype.run = function() {
var prevX = this.x[this.lineLength - 1];
var prevY = this.y[this.lineLength - 1];
for (var i = 1; i < this.lineLength; i ++) {
this.x[i - 1] = this.x[i];
this.y[i - 1] = this.y[i];
}
this.v += 2;
this.v *= this.makeRandom(-5, 5);
this.r += this.makeRandom(-6, 6);
var vx = Math.cos(this.r) * this.v;
var vy = Math.sin(this.r) * this.v;
this.x[this.lineLength - 1] = prevX + vx;
this.y[this.lineLength - 1] = prevY + vy;
this.x[this.lineLength - 1] = constrain(this.x[this.lineLength - 1], 0, this.wWidth);
this.y[this.lineLength - 1] = constrain(this.y[this.lineLength - 1], 0, this.wHeight);
for (var j = 0; j < this.lineLength; j += 1) {
noFill();
var val = j / this.lineLength * 155 + 100;
stroke(val);
curve(this.x[j - 3], this.y[j - 3], this.x[j - 2], this.y[j - 2], this.x[j - 1], this.y[j - 1], this.x[j], this.y[j]);
}
};