JSFiddle - React, Tailwind, and code Playground
JavaScript
function det(m) {
var size = Math.sqrt(m.length);
if (size % 1 !== 0) {
return null;
}
if (size === 2) {
return m[0] * m[3] - m[1] * m[2];
}
return m.slice(0, size).reduce(function(t, v, i) {
var sub = [];
for (var r = size; r < m.length; r += size) {
sub = sub.concat(
m.slice(r, r + i),
m.slice(r + i + 1, r + size)
);
}
return t + (i % 2 === 0 ? -1 : 1) * v * det(sub);
}, 0);
}
function pol(m) {
var size = Math.sqrt(m.length);
if (size % 1 !== 0) {
return null;
}
return function(x) {
return det(m.map(
function(val, i) {
return val - ( Math.floor(i / size) === i % size ? x : 0);
}
));
}
}
function plot(pol, cont, range = 10, size = 500) {
var step = ( range * 2 ) / size;
var points = [];
for(var x = 0; x < size; x ++) {
points.push(x, ',', pol(x * step - range) + size / 2);
}
cont.innerHTML =
'<svg viewBox="0 0 ' + size + ' ' + size + '">' +
'<line stroke="#ddd" stroke-width="1"' +
'x1="0" y1="'+ size / 2 +'" ' +
'x2="'+ size +'" y2="'+ size / 2 + '"/>' +
'<line stroke="#ddd" stroke-width="1"' +
'x1="'+ size / 2 +'" y1="0" ' +
'x2="'+ size / 2 + '" y2="'+ size +'"/>' +
'<polyline fill="none" stroke="#0074d9" stroke-width="2"' +
'points="' + points.join(' ') + '"/>"' +
'</svg>'
}
var matrix = [
1, 2, 6,
1, 3, 4,
0, 4, 5
];
var pc = pol(matrix);
plot(pc, document.querySelector('div'));