12345678910111213141516 |
- // Vector Math
- const vectorDot = (u, v) => u.map((x, i) => x * v[i]).reduce((x, y) => x + y);
- const vectorSqMag = v => vectorDot(v, v);
- const vectorMag = v => Math.sqrt(vectorSqMag(v));
- const vectorSqDist = (u, v) => vectorSqMag(u.map((x, i) => x - v[i]));
- const vectorDist = (u, v) => Math.sqrt(vectorSqDist(u, v));
- const vectorNorm = v => { const n = vectorMag(v); return [ n, v.map(c => c / n) ]; };
- // Angle Math
- const angleDiff = (a, b) => { const raw = Math.abs(a - b); return raw < 180 ? raw : (360 - raw); };
- const rad2deg = 180 / Math.PI;
- // Arg Compare
- const argComp = comp => ra => ra.map((x, i) => [x, i]).reduce((a, b) => comp(a[0], b[0]) > 0 ? b : a)[1];
- const argMin = argComp((a, b) => a - b);
- const argMax = argComp((a, b) => b - a);
|