loosely based on Advent of Code 2024 - 01
trying to remember how turtle toy thing even works
Log in to post a comment.
Canvas.setpenopacity(-1.0); const t = new Turtle(); function draw_cases(x1, x2, y1, y2, cx, cy, n_levels) { t.penup(); t.goto(x1, y1); t.pendown(); t.goto(x2, y1); t.goto(x2, y2); t.goto(x1, y2); t.goto(x1, y1); t.goto(cx, cy); t.penup(); t.goto(x2, y1); t.pendown(); t.goto(cx, cy); const n = 10; const alpha = 0.8; if (x1 > cx) { for (let i = 1; i <= n_levels; i++) { let y = Math.floor(y1 + (y2 - y1) / 3 * i); let ny = Math.floor(y1 + (y2 - y1) / 3 * (i - 1)); t.penup(); t.goto(x2, y); t.pendown(); t.goto(x1, y); t.goto(cx, cy); const W = x1 - cx; let w = W; for (let i = 0; i < n; i++) { w_prv = w; w *= alpha; h1 = (y - cy) / (x1 - cx) * w; h2 = (ny - cy) / (x1 - cx) * w; t.penup(); t.goto(cx + w, cy + h1); t.pendown(); t.goto(cx + w, cy + h2); t.goto(cx + w, cy + h1); t.goto(cx + w_prv, cy + h1); } } } if (x2 < cx) { for (let i = 1; i <= n_levels; i++) { let y = Math.floor(y1 + (y2 - y1) / 3 * i); let ny = Math.floor(y1 + (y2 - y1) / 3 * (i - 1)); t.penup(); t.goto(x1, y); t.pendown(); t.goto(x2, y); t.goto(cx, cy); const W = cx - x2; let w = W; for (let i = 0; i < n; i++) { w_prv = w; w *= alpha; h1 = (y - cy) / W * w; h2 = (ny - cy) / W * w; t.penup(); t.goto(cx - w, cy + h1); t.pendown(); t.goto(cx - w, cy + h2); t.goto(cx - w, cy + h1); t.goto(cx - w_prv, cy + h1); } } } for (let y = -100; y <= y1; y += 1) { let px1 = cx + (x1 - cx) / (y1 - cy) * (y - cy); let px2 = cx + (x2 - cx) / (y1 - cy) * (y - cy); t.penup(); t.goto(px1, y); t.pendown(); t.goto(px2, y); } } const cx = 0, cy = -102; const w = 66, h = 133; draw_cases(-100, -100 + w, 100 - h, 100, cx, cy, 3); draw_cases(100 - w, 100, 100 - h, 100, cx, cy, 3); draw_cases(-100 - 2 * w, -100 - w, 100 - h, 100, cx, cy, 1); draw_cases(100 + w, 100 + 2 * w, 100 - h, 100, cx, cy, 1); draw_cases(-w/2, w/2, 100, 100 + h, cx, cy, 0); for (let i = 1; i < 30; i++) { draw_cases(-100 - 2 * w * (i + 1), -100 - 2 * w * (i + 1) + w, 100 - h, 100, cx, cy, 0); draw_cases(100 + 2 * w * (i + 1) - w, 100 + 2 * w * (i + 1), 100 - h, 100, cx, cy, 0); }