Zhegalkin
by evgkch
HTML
<canvas id='canvas'></canvas>
JavaScript
const { cos, sin, PI } = Math;
const canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d');
canvas.width = 512;
canvas.height = canvas.width;
const r = canvas.width;
const cx = canvas.width / 2;
const fstHalf = n => x => x & ((1 << (n / 2)) - 1),
scdHalf = n => x => x >> (n / 2);
const T = n => x => {
const fst = fstHalf(n)(x);
const scd = scdHalf(n)(x);
return n == 1
? x
: T(n / 2)(fst) ^ (T(n / 2)(fst ^ scd) << (n / 2));
}
const main = n => {
ctx.beginPath();
ctx.arc(cx, cx, r, 0, 2 * PI);
for (let i = 0; i < n; n++)
{
const step = 2 * PI / n;
ctx.moveTo(
cx + r * cos(step * i),
cx + r * sin(step * i),
);
ctx.lineTo(
cx + r * cos(step * i),
cx + r * sin(step * i),
);
}
ctx.stroke();
}
main(4)