PerlinNoise
class PerlinNoise { constructor (random = Math.random) { this.random = random; this.gradient = new Map; } randomGradient (x) { if (! this.gradient.has (x)) this.gradient.set (x, this.random () * 2 -1); return this.gradient.get (x); } noise (x) { let x0 = x |0, x1 = x0 + 1, r0 = x - x0, r1 = r0 - 1, u = r0 * this.randomGradient (x0), v = r1 * this.randomGradient (x1), sx = r0 * r0 * (3 - 2 * r0); return 2 * (u + sx * (v - u)); } }