67 lines
2.0 KiB
Markdown
67 lines
2.0 KiB
Markdown
---
|
|
title: Dot Product
|
|
---
|
|
## Dot Product
|
|
|
|
A dot product is a way of multiplying two vectors together to get a single number.
|
|
Dot products are common in physics and linear algebra.
|
|
|
|
You can write the dot product of two vectors **a** and **b** as **a** · **b** .
|
|
|
|
Two vectors must be of the same length to have a dot product.
|
|
|
|
To find the dot product, multiply the `nth` element in the first vector by the `nth` element in the second vector.
|
|
Do this for all of the elements.
|
|
Then, find the sum of all those products.
|
|
This sum is the dot product!
|
|
|
|
### Properties of Dot Products
|
|
|
|
The dot product of two vectors can also be expressed as `a · b = ||a|| * ||b|| * cos(theta)`.
|
|
In this formula, `||a||` is the magnitude of vector **a**, and `theta` is the angle between the two vectors.
|
|
|
|
Two orthogonal (a.k.a. perpendicular) vectors will always have a dot product of 0.
|
|
|
|
### Worked Example
|
|
|
|
For example, say you have the vectors **a** and **b**.
|
|
Let `a = (1 2 3 4)` and `b = (-1 0 1 2)`.
|
|
|
|
The dot product would be `(1)(-1) + (2)(0) + (3)(1) + (4)(2) = -1 + 0 + 3 + 8 = 12`.
|
|
So in this case, you would say that **a** · **b** = 12.
|
|
|
|
### Code Example
|
|
|
|
Here's an example function in JavaScript.
|
|
It returns the dot product of two vector arguments:
|
|
|
|
```javascript
|
|
|
|
/**
|
|
* @param {array} a - A vector/array of numbers
|
|
* @param {array} b - A vector/array of numbers with the same length as a
|
|
* @returns {number} - The dot product of a and b
|
|
*/
|
|
function dotProduct(a, b) {
|
|
// Check if the lengths are the same - if not, there can't be a dot product
|
|
if (a.length !== b.length) {
|
|
throw "vector lengths must be equal";
|
|
}
|
|
|
|
// Create a variable to store the sum as we calculate it
|
|
let product = 0;
|
|
|
|
// Loop through the vectors, calculate products, and add them to the total
|
|
for (let i = 0; i < a.length; i++) {
|
|
// You may want to ensure that a[i] and b[i] are both finite numbers
|
|
product += a[i] * b[i];
|
|
}
|
|
|
|
return product;
|
|
}
|
|
|
|
```
|
|
|
|
### More Information:
|
|
[Vectors](../vectors/index.md)
|