Randomized strings of arcs that fill up an invisible grid. If a square is occupied by an arc, then another arc will not be drawn there so they fill the space without over cluttering.
Reminds me of the texture of a leaf.
Log in to post a comment.
// You can find the Turtle API reference here: https://turtletoy.net/syntax Canvas.setpenopacity(1); // Global code will be evaluated once. console.clear(); const turtle = new Turtle(); let seed = 1000; // min=1 max=1000000 step=1 const bits = 20; const samples = 150000; const mod = 1<<bits; let done = false; let num_lines = 600; // min = 10 max = 600 step = 1 let arcs_per_line = 5; // min = 1 max = 10 step = 1 let curviness = 2; // min = 0 max = 30 step = 1 let steps_per_arc = 40; // min = 1 max = 100 step = 1 let draw_squares_filled = 0; //min = 0 max = 1 step = 1 (No, Yes) already_visited = []; for(let i = -100; i < 100; i++) { already_visted_row = [] for(let j = -100; j < 100; j++) { already_visted_row.push(false); } already_visited.push(already_visted_row); } function arc(steps, angle) { last_x = 110; last_y = 110; for(let i = 0; i < steps; i++) { turtle.forward(1); turtle.right(angle); // console.log("x: " + Math.round(turtle.x()) + ", y: " + + Math.round(turtle.y())) if(Math.abs(Math.round(turtle.x())) >= 100 || Math.abs(Math.round(turtle.y())) >= 100) { done = true; break; } else if(last_x == Math.round(turtle.x())+100 && last_y == Math.round(turtle.y())+100 || !already_visited[Math.round(turtle.x())+100][Math.round(turtle.y())+100]) { last_x = Math.round(turtle.x())+100; last_y = Math.round(turtle.y())+100; already_visited[Math.round(turtle.x())+100][Math.round(turtle.y())+100] = true; } else { done = true; break; } } } function circle(radius, steps, x_center, y_center) { theta = Math.PI * 2 / steps; turtle.penup(); turtle.goto(x_center + radius * Math.cos(theta * 0), y_center + radius * Math.sin(theta * 0)) turtle.pendown(); for(i = 0; i <= steps; i++) { x = x_center + radius * Math.cos(theta * i); y = y_center + radius * Math.sin(theta * i); turtle.goto(x,y); } } function square(side_length, x_center, y_center) { turtle.penup(); turtle.goto(x_center + side_length/2, y_center + side_length/2); turtle.pendown(); turtle.goto(x_center - side_length/2, y_center + side_length/2); turtle.goto(x_center - side_length/2, y_center - side_length/2); turtle.goto(x_center + side_length/2, y_center - side_length/2); turtle.goto(x_center + side_length/2, y_center + side_length/2); } for(let i = 0; i < num_lines; i++) { done = false; turtle.jump(random() * 200 - 100, random() * 200 - 100) for(let j = 0; j < arcs_per_line; j++) { if(!done) { arc(Math.round(random() * steps_per_arc), Math.round(random() * curviness * 2 - curviness)); } } } if(draw_squares_filled) { for(let i = -100; i < 100; i++) { for(let j = -100; j < 100; j++) { if(already_visited[i+100][j+100]) { square(1, i, j); } } } } //////////////////////////////////////////////////////////////// // Pseudorandom number generator. Created by Reinder Nijhoff 2024 // https://turtletoy.net/turtle/a2274fd1fe //////////////////////////////////////////////////////////////// function random() { // returns a number [0, 1[ let r = 1103515245 * (((seed+=12345) >> 1) ^ seed); r = 1103515245 * (r ^ (r >> 3)); r = r ^ (r >> 16); return (r % mod) / mod; }