### Fork: Spirograph

A basic spirograph, i.e., one circle rolling on another.

```// Forked from "Spirograph" by troisiemetype
// https://turtletoy.net/turtle/783125b928

// You can find the Turtle API reference here: https://turtletoy.net/syntax
Canvas.setpenopacity(1);

let r1 = 20;          // min = 1, max = 100, step = 1
let r2 = 65;          // min = 1, max = 100, step = 1
// rPen is the position on the second circle, it's a percentage of the radius. value > 100 are outside of the circle
let rPen = 140;         // min = 1, max = 600, step = 1
//const turns = 1;        // min = 1, max = 50, step = 1
rPen /= 100;
let stopat = 365; // min = 0, max = 365, step = 1

// Global code will be evaluated once.
const turtle = new Turtle();

function getTurns(x, y){
let tmp = 0;
if(y > x){
tmp = x;
x = y;
y = tmp;
}

let yy = y;
let r = y;
let rr = r;
while(r != 0){
rr = r;
r = x % yy;
//        console.log(x, yy, r, rr);
x = yy;
yy = r;
}

return y / rr;
}

let turns = getTurns(r1, r2);

if(r1 > r2){
turns *= r2 * ((r2 + r1) / r1);
}

r1 /= 3;
r2 /= 3;

//console.log(turns);

// The walk function will be called until it returns false.
function walk(i) {

let theta = Math.PI * i / 180;

let cx = Math.cos(theta) * (r1 + r2);
let cy = Math.sin(theta) * (r1 + r2);

let rx = rPen * Math.cos(theta * (r2 + r1) / r1) * r2;
let ry = rPen * Math.sin(theta * (r2 + r1) / r1) * r2;

if(i) turtle.goto(cx + rx, cy + ry);
else  turtle.jump(cx + rx, cy + ry);

return i <= stopat * turns;
}```