30秒学会 JavaScript 片段 · 2019年9月23日

30秒学会 JavaScript 片段 – vectorAngle

Returns the angle (theta) between two vectors.

Use Array.prototype.reduce(), Math.pow() and Math.sqrt() to calculate the magnitude of each vector and the scalar product of the two vectors.
Use Math.acos() to calculate the arccos and get the theta value.

代码片段

const vectorAngle = (x, y) => {
  let mX = Math.sqrt(x.reduce((acc, n) => acc + Math.pow(n, 2), 0));
  let mY = Math.sqrt(y.reduce((acc, n) => acc + Math.pow(n, 2), 0));
  return Math.acos(x.reduce((acc, n, i) => acc + n * y[i], 0) / (mX * mY));
};

使用样例

vectorAngle([3, 4], [4, 3]); // 0.283794109208328