math.js 752 B

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