matrix
by evgkch
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/6.6.1/math.min.js"></script>
<canvas id="canvas"></canvas>
JavaScript
const { cos, sin, PI } = Math;
const fac = n => (x => n === 1 ? x : n * fac(n - 1))(1);
const binaryStatesOf = n => 2 ** (n) - 1;
const canvas = document.getElementById('canvas');
canvas.width = 1000;
canvas.height = 1000;
const r = 500;
const cx = canvas.width / 2;
const cy = canvas.height / 2;
const ctx = canvas.getContext('2d');
function main(n) {
const m = binaryStatesOf(n);
const words = new Uint16Array(m);
const matrix = math.matrix([
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1],
[0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
]);
for (let i = 0; i < m; i++) {
const vec = i.toString(2)
.padStart(n, 0)
.split('')
.map(Number);
const res = parseInt(
math.multiply(matrix, vec)
.toArray()
.map(x => x % 2)
.join(''),
2
);
words[i] = res;
}
//console.log(words.slice())
// Circle
ctx.beginPath();
ctx.arc(cx, cy, r, 0, 2 * PI);
ctx.stroke();
ctx.closePath();
// Zero
ctx.beginPath();
ctx.arc(cx, cy, 2, 0, 2 * PI);
ctx.fill();
ctx.closePath();
// Rest
ctx.beginPath();
ctx.globalAlpha = 0.01
for (let i = 1; i < m; i++) {
const...