Files
30-seconds-of-code/snippets/vectorAngle.md
2019-12-22 17:59:26 +01:00

969 B

title, tags
title tags
vectorAngle math, beginner

Returns the angle (theta) value between two vectors.

Use Math.trunc() to convert the half of length to integer. Use Array.prototype.slice() slice the incoming array into 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 arccos and get the theta.

const vectorAngle = (...x) =>{ 
  let half = Math.trunc(x.length / 2);
  let [a, b] = [x.slice(0, half), x.slice(half)];  
  let magnitudeOfA = Math.sqrt(a.reduce((total, num) => {return total + Math.pow(num, 2);}, 0));
  let magnitudeOfB = Math.sqrt(b.reduce((total, num) => {return total + Math.pow(num, 2);}, 0));
  let scalar = a.reduce((total, num, i)=>{return total + (num * b[i])}, 0);
  return Math.acos(scalar / (magnitudeOfA * magnitudeOfB));
};
vectorAngle(3,4,4,3); // 0.283794109208328