Log in to post a comment.
Canvas.setpenopacity(0.5); // Global code will be evaluated once. const turtle = new Turtle(); const size = 80.0; class Noise { // http://mrl.nyu.edu/~perlin/noise/ constructor(octaves = 1) { this.p = new Uint8Array(512); this.octaves = octaves; for (let i = 0; i < 512; ++i) { this.p[i] = Math.random() * 256*100; } } lerp(t, a, b) { return a + t * (b - a); } grad2d(i, x, y) { const v = (i & 1) === 0 ? x : y; return (i & 2) === 0 ? -v : v; } noise2d(x2d, y2d) { const X = Math.floor(x2d) & 255; const Y = Math.floor(y2d) & 255; const x = x2d - Math.floor(x2d); const y = y2d - Math.floor(y2d); const fx = (3 - 2 * x) * x * x; const fy = (3 - 2 * y) * y * y; const p0 = this.p[X] + Y; const p1 = this.p[X + 1] + Y; return this.lerp( fy, this.lerp( fx, this.grad2d(this.p[p0], x, y), this.grad2d(this.p[p1], x - 1, y) ), this.lerp( fx, this.grad2d(this.p[p0 + 1], x, y - 1), this.grad2d(this.p[p1 + 1], x - 1, y - 1) ) ); } noise(x, y, scale=0.5) { let e = 1, k = 1, s = 0; for (let i = 0; i < this.octaves; ++i) { e *= scale; // This constant factor will adjust where the lines are drawn s += e * (1 + this.noise2d(k * x, k * y)) / 2; k *= 2; } return s; } } const perlin = new Noise(3); // The walk function will be called until it returns false. circle_dim = [5] radius = [] cx = [] cy = [] spacing = 10 for(let i=-100;i<100;i+=spacing){ for(let j=-100;j<100;j+=spacing){ cx.push(i) cy.push(j) ind = Math.floor(Math.random()*circle_dim.length) radius.push(circle_dim[ind]) } } turtle.up(); function walk(i) { scale = 300; // J is x coordinate for it to start //(𝑥𝑝−𝑥𝑐)2+(𝑦𝑝−𝑦𝑐)2 with 𝑟2 for (let j = -100; j < 100; j+= 0.5) { const h = perlin.noise(100 + j * 0.01, 100 + i * 0.01, 0.4); turtle.goto(j, 0.2 * (i-1000) + h * 300 - 100); ax = Math.abs(turtle.x()); ay = Math.abs(turtle.y()); turtle_up = true for(let c = 0;c<radius.length;c++){ if (((Math.pow(ax - cx[c], 2)+Math.pow(ay-cy[c], 2)) < Math.pow(radius[c], 2))){ //turtle.down(); turtle_up = false } } if(turtle_up){ turtle.up(); }else{ turtle.down(); } /* if (((Math.pow(ax, 2)+Math.pow(ay, 2)) < Math.pow(size / 1.1, 2))) turtle.down(); else if (((Math.pow(ax, 2)+Math.pow(ay, 2)) < Math.pow(size / 1.05, 2))) turtle.up(); else if((Math.pow(ax, 2)+Math.pow(ay, 2)) < Math.pow(size, 2)) turtle.down(); else turtle.up(); */ } turtle.up(); return i < 2200; }