aoc 2024 02

loosely based on Advent of Code 2024 - 02

fun fact: this fusion image consists entirely of toric sections

Log in to post a comment.

Canvas.setpenopacity(-1.0);

const t = new Turtle();

function draw_point(phi, r) {
    let x = r * Math.cos(phi);
    let y = r * Math.sin(phi);
    
    let dir = 360 * Math.random();
    
    for (let i = 0; i < 2; i++) {
        t.jump(x, y);
        t.seth(dir + i * 180);
        
        t.forward(1.2);
    }
}

function draw_cassini_oval(a, b) {
    const N = 300;
    let e = b / a;
    
    for (let i = 0; i < N; i++) {
       let phi = 2 * Math.PI * Math.random();
       
       let phi2 = 2 * phi;
       let cosphi2 = Math.cos(phi2), sinphi2 = Math.sin(phi2);
      
       let D2 = e**4 - sinphi2**2;
       
       if (D2 >= 0) {
           let D = Math.sqrt(D2);
           
           let r2 = a**2 * (cosphi2 - D);
           if (r2 > 0) {
               let r = Math.sqrt(r2);
               draw_point(phi, r);
               draw_point(phi, -r);
           }
           
           let R2 = a**2 * (cosphi2 + D);
           if (R2 > 0) {
               let R = Math.sqrt(R2);
               draw_point(phi, R);
               draw_point(phi, -R);
           }
       }
    }
}


const A = 66;

for (let i = 0; i < 200; i++) {
    draw_cassini_oval(A, 2.5 * A * (Math.random() ** 2));
}