added snippet VectorAngle
This commit is contained in:
36
snippets/vectorAngle.md
Normal file
36
snippets/vectorAngle.md
Normal file
@ -0,0 +1,36 @@
|
||||
---
|
||||
title: vectorAngle
|
||||
tags: math,intermediate
|
||||
---
|
||||
|
||||
Returns the angle (theta) value between two vectors.
|
||||
|
||||
Use `Math.trunc()` to pick the integer value of length. Use `slice()` slice the incoming array into individual vectors.
|
||||
Use `forEach()`, `Math.pow()` and `Math.sqrt()` to iterate over the vectors and calculate the magnitude of each vector and the scalar product.
|
||||
Use `Math.acos()` to calculate arccos and get the theta.
|
||||
|
||||
|
||||
```js
|
||||
const theta = ((...x) =>{
|
||||
let half = Math.trunc(x.length / 2);
|
||||
let a = x.slice(0 , half);
|
||||
let b = x.slice(half);
|
||||
|
||||
let magnitudeOfA = 0;
|
||||
a.forEach((a) => magnitudeOfA += Math.pow(a , 2));
|
||||
magnitudeOfA = Math.sqrt(magnitudeOfA);
|
||||
|
||||
let magnitudeOfB = 0;
|
||||
b.forEach((b) => magnitudeOfB += Math.pow(b , 2));
|
||||
magnitudeOfB = Math.sqrt(magnitudeOfB);
|
||||
|
||||
let scalar = 0;
|
||||
a.forEach((a , i) => scalar += a * b[i]);
|
||||
|
||||
return Math.acos(scalar / (magnitudeOfA*magnitudeOfB));
|
||||
});
|
||||
```
|
||||
|
||||
```js
|
||||
theta(3,4,4,3); // 0.283794109208328
|
||||
```
|
||||
Reference in New Issue
Block a user