PI

Binary digits of PI

Log in to post a comment.

Canvas.setpenopacity(1);


let R = 17.6;//  min=1 max=200 step=0.01
let Rincrease = 2.0;//  min=0.0 max=5 step=0.1
let steps = 44;// min=1 max=100 step=1

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

function circle(x, y, r) {
    turtle.setheading(-90);
    turtle.jump(x-r, y);
    turtle.pendown();
    turtle.circle(r);
}

function p(v) {
    return [Math.cos(v), Math.sin(v)];
}
function r(a) {
    let x = Math.cos(a);
    let y = Math.sin(a);
    return Math.sqrt((x-1)*(x-1)+y*y);
}
function circleA(a, r1, r2) {
    let x = Math.cos(a);
    let y = Math.sin(a);
    circle(x*r1, y*r1, r2);
}

let cr = R;
let rRad = r(1);
let rRad2 = r(0.5);

circle(0, 0, 0.03*R);
turtle.jump(-cr, 0);
turtle.pendown();
turtle.goto(cr, 0);
circle(0, 0, R);
for (let i=0; i<3; i++) {
     let pos = p(i * 1.0);
     circle(pos[0]*cr, pos[1]*cr, rRad*cr);
}
circleA(3, cr, rRad2*cr);

let pRad = 3.5;
let pi = Math.acos(-1);
let pStep = pi;
let step = pi-3;

turtle.pendown();
let str = "11.";
function walk(i) {
    console.log(`${step} ${pStep} ${pRad}`);
    if (pStep < pRad) {
        str += "0";
        console.log(str);
        circleA(pStep, cr, cr*r(step));
        pStep += step;
        step *= 2;
    } else {
        str += "1";
        console.log(str);
        step = pStep - pRad;
        turtle.jump(0, 0);
        turtle.goto(Math.cos(pRad+0.0)*cr, Math.sin(pRad+0.0)*cr);
        
        //circleA(pRad, cr, cr*rRad2);
        pRad = pRad+0.5;
        circleA(pStep, cr, cr*r(step));
        pStep += step;
        step *= 2;
        if (pStep >= 2*pi || pRad >= 2*pi) {
            pStep -= 2*pi;
            pRad -= 2 * pi;
            cr += Rincrease*R;
            circle(0, 0, cr);
        }
    }
    console.log(`2: ${step} ${pStep} ${pRad}`);
    return i < steps;
}