JSFiddle - React, Tailwind, and code Playground
by Josh Pullen
JavaScript
class Vector {
constructor(...entries) {
this.entries = Object.freeze(entries);
Object.freeze(this);
}
add(b) {
return Vector.add(this, b);
}
scale(a) {
return Vector.scale(this, a);
}
static add(a, b) {
if (a.entries.length !== b.entries.length) throw new Error();
let newEntries = [];
for (let i = 0; i < a.entries.length; i++) {
newEntries[i] = a.entries[i] + b.entries[i];
}
return new Vector(...newEntries);
}
static scale(vec, scalar) {
return new Vector(...vec.entries.map(e => e * scalar));
}
}
const pos = new Vector(1, 2, 3);
const vel = new Vector(0, -1, 2);
console.log(pos.add(vel.scale(2)));
console.log(add(pos, scale(vel, 2)));
console.log(m`${pos} + 2 * ${vel}`);
console.log(m(`pos + 2 * vel`, { pos, vel }));
console.log(m`d/dx(x * ${pos}) - ${pos}`);