en.wikipedia.org/wiki/hypotrochoid
Partially inspired by this Turtle:
Spirographs
It's easy for the sliders to careen into large drawings that will lag your computer. So be a little careful.
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 radius_1 = 17; // min = 2 max = 20 step = 0.01
const radius_2 = 14; // min = 2 max = 20 step = 0.01
const radius_1_delta = 75; // min = 20 max = 200 step = .1
const radius_2_delta = 69; // min = 20 max = 200 step = .1
const focus = 7; // min = 0.5 max = 20 step = 0.01
const scale = .5; // min = .1 max = 5 step = .01
const gap = 12; // min = 5 max = 30 step = 1
let grid_size = 13; // min = 1 max = 20 step = 1
const steps = 2000; // min = 1 max = 3000 step = 1
grid_size = grid_size - 1; // shhhh I'm too lazy to figure out how to actually fix this
function draw_hypotrochoid(x, y, a, b, h) {
turtle.penup();
let t = 0;
let turtle_x = x + (a - b) * Math.cos(t) + h * Math.cos(t * (a/b - 1));
let turtle_y = y + (a - b) * Math.sin(t) + h * Math.sin(t * (a/b - 1));
turtle.goto(turtle_x, turtle_y);
turtle.pendown();
for(let i = 0; i < steps; i++) {
t = i / 50
turtle_x = x + (a - b) * Math.cos(t) + h * Math.cos(t * (a/b - 1));
turtle_y = y + (a - b) * Math.sin(t) + h * Math.sin(t * (a/b - 1));
turtle.goto(turtle_x, turtle_y);
}
}
for(let i = -gap * grid_size / 2 ; i <= gap * grid_size / 2 ; i+= gap) {
for(let j = -gap * grid_size / 2 ; j <= gap * grid_size / 2 ; j+= gap) {
draw_hypotrochoid(i,j,(i / radius_1_delta + radius_1) * scale,(j / radius_2_delta + radius_2) * scale, focus * scale)
}
}