Simple pattern of overlapping circles
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.
const turtle = new Turtle();
const square_size = 1; // min = .5 max = 10 step = .1
const lines_per_square = 1; // min = 1 max = 4 step = 1
const num_circles = 10; // min = 0 max = 50 step = 1
class Circle {
constructor(cx, cy, r) {
this.cx = cx;
this.cy = cy;
this.r = r;
}
}
circles = [];
for(let i = 0; i < num_circles; i++) {
let circle = new Circle(Math.random() * 200 - 100, Math.random() * 200 - 100, Math.random() * 25 + 25)
circles.push(circle);
}
for(let i = -100; i < 100; i+=square_size) {
for(let j = -100; j < 100; j+=square_size) {
circle_count = 0;
for(circle in circles) {
if(Math.sqrt((circles[circle].cx-i)*(circles[circle].cx-i) + (circles[circle].cy-j)*(circles[circle].cy-j)) < circles[circle].r) {
circle_count++;
}
}
if(circle_count % 2 == 0) {
vertical_line_square(i, j, lines_per_square, square_size)
}
else {
horizontal_line_square(i, j, lines_per_square, square_size)
}
}
}
function vertical_line_square(x, y, num_lines, size) {
for(let i = 0; i < num_lines; i++) {
turtle.penup();
turtle.goto(x + -size/2 + size/(2*num_lines) + i*size/num_lines, y + size/2);
turtle.pendown();
turtle.goto(x + -size/2 + size/(2*num_lines) + i*size/num_lines, y - size/2);
}
}
function horizontal_line_square(x, y, num_lines, size) {
for(let i = 0; i < num_lines; i++) {
turtle.penup();
turtle.goto(x + size/2, y + -size/2 + size/(2*num_lines) + i*size/num_lines);
turtle.pendown();
turtle.goto(x - size/2, y + -size/2 + size/(2*num_lines) + i*size/num_lines);
}
}