A collection of useful functions
npm install @cardananium/commonjsA small library of useful functions
Node:
``javascript`
const { vec, mat } = require('@basementuniverse/commonjs');
Browser:
`html`
Typescript:
`typescript`
import { vec, mat } from '@basementuniverse/commonjs';
vecCreate a new vector
matCreate a new matrix
numberAn interpolation function
*A function for generating array values
ObjectA 2d vector
numberA function to call on each component of a vector
ObjectA matrix
numberA function to call on each entry of a matrix
* Math
* [.floatEquals(a, b, [p])](#Math.floatEquals) ⇒ boolean
* [.clamp(a, [min], [max])](#Math.clamp) ⇒ number
* .frac(a) ⇒ number
* .lerp(a, b, i) ⇒ number
* .unlerp(a, b, i) ⇒ number
* .blerp(c00, c10, c01, c11, ix, iy) ⇒ number
* .remap(i, a1, a2, b1, b2) ⇒ number
* .smoothstep(a, b, i) ⇒ number
* .radians(degrees) ⇒ number
* .degrees(radians) ⇒ number
* .randomBetween(min, max) ⇒ number
* .randomIntBetween(min, max) ⇒ number
* [.cltRandom([mu], [sigma], [samples])](#Math.cltRandom) ⇒ number
* .cltRandomInt(min, max) ⇒ number
* .weightedRandom(w) ⇒ number
* [.lerpArray(a, i, [f])](#Math.lerpArray) ⇒ number
* .dot(a, b) ⇒ number
* .factorial(a) ⇒ number
* .permutation(n, r) ⇒ number
* .combination(n, r) ⇒ number
Kind: static method of Math
Returns: boolean - True if numbers a and b are approximately equal
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | number | | Number a |
| b | number | | Number b |
| [p] | number | Number.EPSILON | The precision value |
Kind: static method of Math
Returns: number - A clamped number
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | number | | The number to clamp |
| [min] | number | 0 | The minimum value |
| [max] | number | 1 | The maximum value |
Kind: static method of Math
Returns: number - The fractional part of the number
| Param | Type | Description |
| --- | --- | --- |
| a | number | The number from which to get the fractional part |
Kind: static method of Math
Returns: number - An interpolated value in the interval [a, b]
| Param | Type | Description |
| --- | --- | --- |
| a | number | The minimum number |
| b | number | The maximum number |
| i | number | The interpolation value, should be in the interval [0, 1] |
Kind: static method of Math
Returns: number - The position of i between a and b
| Param | Type | Description |
| --- | --- | --- |
| a | number | The minimum number |
| b | number | The maximum number |
| i | number | The interpolated value in the interval [a, b] |
Kind: static method of Math
Returns: number - A bilinear interpolated value
| Param | Type | Description |
| --- | --- | --- |
| c00 | number | Top-left value |
| c10 | number | Top-right value |
| c01 | number | Bottom-left value |
| c11 | number | Bottom-right value |
| ix | number | Interpolation value along x |
| iy | number | Interpolation value along y |
Kind: static method of Math
| Param | Type | Description |
| --- | --- | --- |
| i | number | The number to re-map |
| a1 | number | |
| a2 | number | |
| b1 | number | |
| b2 | number | |
Kind: static method of Math
Returns: number - An interpolated value in the interval [a, b]
| Param | Type | Description |
| --- | --- | --- |
| a | number | The minimum number |
| b | number | The maximum number |
| i | number | The interpolation value |
Kind: static method of Math
Returns: number - The angle in radians
| Param | Type | Description |
| --- | --- | --- |
| degrees | number | The angle in degrees |
Kind: static method of Math
Returns: number - The angle in degrees
| Param | Type | Description |
| --- | --- | --- |
| radians | number | The angle in radians |
Kind: static method of [Math
number - A random float in the interval [min, max) | Param | Type | Description |
| --- | --- | --- |
| min | number | Inclusive min |
| max | number | Exclusive max |
Kind: static method of Math
Returns: number - A random integer in the interval [min, max]
| Param | Type | Description |
| --- | --- | --- |
| min | number | Inclusive min |
| max | number | Inclusive max |
Kind: static method of Math
Returns: number - A normally-distributed random number
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| [mu] | number | 0.5 | The mean value |
| [sigma] | number | 0.5 | The standard deviation |
| [samples] | number | 2 | The number of samples |
Kind: static method of Math
Returns: number - A normally-distributed random integer
| Param | Type | Description |
| --- | --- | --- |
| min | number | Inclusive min |
| max | number | Inclusive max |
Kind: static method of Math
Returns: number - An index from w
| Param | Type | Description |
| --- | --- | --- |
| w | Array.<number> | An array of weights |
Kind: static method of Math
Returns: number - An interpolated value in the interval [min(a), max(a)]
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | Array.<number> | | An array of values interpolate |
| i | number | | A number in the interval [0, 1] |
| [f] | interpolationCallback | Math.lerp | The interpolation function to use |
Kind: static method of Math
Returns: number - a ∙ b
| Param | Type | Description |
| --- | --- | --- |
| a | Array.<number> | Vector a |
| b | Array.<number> | Vector b |
Kind: static method of Math
Returns: number - a!
| Param | Type |
| --- | --- |
| a | number |
Kind: static method of Math
Returns: number - nPr
| Param | Type |
| --- | --- |
| n | number |
| r | number |
Kind: static method of Math
Returns: number - nCr
| Param | Type |
| --- | --- |
| n | number |
| r | number |
* Array
* _instance_
.at(i) ⇒ \
.chunk(n) ⇒ Array.<Array.<\>>
.shuffle() ⇒ Array.<\>
* _static_
.times(f, n) ⇒ Array.<\>
* .range(n) ⇒ Array.<number>
.zip(a, b) ⇒ Array.<Array.<\>>
Kind: instance method of Array
Returns: \* - An element from the array
| Param | Type | Description |
| --- | --- | --- |
| i | number | The positively/negatively wrapped array index |
Kind: instance method of Array
Returns: Array.<Array.<\*>> - An array of array chunks
| Param | Type | Description |
| --- | --- | --- |
| n | number | The chunk size |
Kind: instance method of Array
Returns: Array.<\*> - The shuffled array
Kind: static method of Array
| Param | Type | Description |
| --- | --- | --- |
| f | timesCallback | |
| n | number | The size of the array |
Kind: static method of Array
Returns: Array.<number> - An array of integers 0->(n - 1)
| Param | Type | Description |
| --- | --- | --- |
| n | number | The size of the array |
Kind: static method of Array
| Param | Type |
| --- | --- |
| a | Array.<\*> |
| b | Array.<\*> |
vecKind: global function
Returns: vec - A new vector
| Param | Type | Description |
| --- | --- | --- |
| [x] | number \| vec | The x component of the vector, or a vector to copy |
| [y] | number | The y component of the vector |
Example (Various ways to initialise a vector)
`js``
let a = vec(3, 2); // (3, 2)
let b = vec(4); // (4, 4)
let c = vec(a); // (3, 2)
let d = vec(); // (0, 0)
* [vec([x], [y])](#vec) ⇒ vec
* .components(a) ⇒ Array.<number>
* .ux() ⇒ vec
* .uy() ⇒ vec
* .add(a, b) ⇒ vec
* .mul(a, b) ⇒ vec
* .sub(a, b) ⇒ vec
* .len(a) ⇒ number
* .manhattan(a) ⇒ number
* .nor(a) ⇒ vec
* .dot(a, b) ⇒ number
* .rot(a, r) ⇒ vec
* .eq(a, b) ⇒ boolean
* .rad(a) ⇒ number
* .cpy(a) ⇒ vec
* .map(a, f) ⇒ vec
* [.str(a, [s])](#vec.str) ⇒ string
Kind: static method of vec
Returns: Array.<number> - The vector components as an array
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to get components from |
Kind: static method of vec
Returns: vec - A unit vector (1, 0)
Kind: static method of vec
Returns: vec - A unit vector (0, 1)
Kind: static method of vec
Returns: vec - a + b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: vec - a * b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | number | Scalar b |
Kind: static method of vec
Returns: vec - a - b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: number - |a|
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
Kind: static method of vec
Returns: number - |a|
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
Kind: static method of vec
Returns: vec - ^a
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to normalise |
Kind: static method of vec
Returns: number - a ∙ b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: vec - A rotated vector
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to rotate |
| r | number | The angle to rotate by, measured in radians |
Kind: static method of vec
Returns: boolean - True if vectors a and b are equal, false otherwise
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: number - The angle of vector a in radians
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
Kind: static method of vec
Returns: vec - A copy of vector a
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to copy |
Kind: static method of vec
Returns: vec - Vector a mapped through f
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| f | vectorMapCallback | The function to call on each component of the vector |
Kind: static method of vec
Returns: string - A string representation of the vector
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | vec | | The vector to convert |
| [s] | string | "', '" | The separator string |
matKind: global function
Returns: mat - A new matrix
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| [m] | number | 4 | The number of rows |
| [n] | number | 4 | The number of columns |
| [entries] | Array.<number> | [] | Matrix values in reading order |
* [mat([m], [n], [entries])](#mat) ⇒ mat
* .identity(n) ⇒ mat
* .get(a, i, j) ⇒ number
* .set(a, i, j, v)
* .row(a, m) ⇒ Array.<number>
* .col(a, n) ⇒ Array.<number>
* .add(a, b) ⇒ mat
* .sub(a, b) ⇒ mat
* .mul(a, b) ⇒ mat \| boolean
* .scale(a, b) ⇒ mat
* .trans(a) ⇒ mat
* .minor(a, i, j) ⇒ mat \| boolean
* .det(a) ⇒ number \| boolean
* .nor(a) ⇒ mat \| boolean
* .adj(a) ⇒ mat
* .inv(a) ⇒ mat \| boolean
* .eq(a, b) ⇒ boolean
* .cpy(a) ⇒ mat
* .map(a, f) ⇒ mat
* [.str(a, [ms], [ns])](#mat.str) ⇒ string
Kind: static method of mat
Returns: mat - An identity matrix
| Param | Type | Description |
| --- | --- | --- |
| n | number | The size of the matrix |
Kind: static method of mat
Returns: number - The value at position (i, j) in matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| i | number | The row offset |
| j | number | The column offset |
Kind: static method of mat
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| i | number | The row offset |
| j | number | The column offset |
| v | number | The value to set in matrix a |
Kind: static method of mat
Returns: Array.<number> - Row m from matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| m | number | The row offset |
Kind: static method of mat
Returns: Array.<number> - Column n from matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| n | number | The column offset |
Kind: static method of mat
Returns: mat - a + b
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat - a - b
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat \| boolean - ab or false if the matrices cannot be multiplied
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat - a * b
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | number | Scalar b |
Kind: static method of mat
Returns: mat - A transposed matrix
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to transpose |
Kind: static method of mat
Returns: mat \| boolean - The (i, j) minor of matrix a or false if the matrix is not square
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| i | number | The row offset |
| j | number | The column offset |
Kind: static method of mat
Returns: number \| boolean - |a| or false if the matrix is not square
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
Kind: static method of mat
Returns: mat \| boolean - ^a or false if the matrix is not square
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to normalise |
Kind: static method of mat
Returns: mat - The adjugate of a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix from which to get the adjugate |
Kind: static method of mat
Returns: mat \| boolean - a^-1 or false if the matrix has no inverse
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to invert |
Kind: static method of mat
Returns: boolean - True if matrices a and b are identical, false otherwise
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat - A copy of matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to copy |
Kind: static method of mat
Returns: mat - Matrix a mapped through f
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| f | matrixMapCallback | The function to call on each entry of the matrix |
Kind: static method of mat
Returns: string - A string representation of the matrix
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | mat | | The matrix to convert |
| [ms] | string | "', '" | The separator string for columns |
| [ns] | string | "'\\n'" | The separator string for rows |
numberKind: global typedef
Returns: number - The interpolated value in the interval [a, b]
| Param | Type | Description |
| --- | --- | --- |
| a | number | The minimum number |
| b | number | The maximum number |
| i | number | The interpolation value, should be in the interval [0, 1] |
\*Kind: global typedef
Returns: \* - The array value
| Param | Type | Description |
| --- | --- | --- |
| i | number | The array index |
ObjectKind: global typedef
Properties
| Name | Type | Description |
| --- | --- | --- |
| x | number | The x component of the vector |
| y | number | The y component of the vector |
* vec : Object
* .components(a) ⇒ Array.<number>
* .ux() ⇒ vec
* .uy() ⇒ vec
* .add(a, b) ⇒ vec
* .mul(a, b) ⇒ vec
* .sub(a, b) ⇒ vec
* .len(a) ⇒ number
* .manhattan(a) ⇒ number
* .nor(a) ⇒ vec
* .dot(a, b) ⇒ number
* .rot(a, r) ⇒ vec
* .eq(a, b) ⇒ boolean
* .rad(a) ⇒ number
* .cpy(a) ⇒ vec
* .map(a, f) ⇒ vec
* [.str(a, [s])](#vec.str) ⇒ string
Kind: static method of vec
Returns: Array.<number> - The vector components as an array
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to get components from |
Kind: static method of vec
Returns: vec - A unit vector (1, 0)
Kind: static method of vec
Returns: vec - A unit vector (0, 1)
Kind: static method of vec
Returns: vec - a + b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: vec - a * b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | number | Scalar b |
Kind: static method of vec
Returns: vec - a - b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: number - |a|
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
Kind: static method of vec
Returns: number - |a|
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
Kind: static method of vec
Returns: vec - ^a
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to normalise |
Kind: static method of vec
Returns: number - a ∙ b
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: vec - A rotated vector
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to rotate |
| r | number | The angle to rotate by, measured in radians |
Kind: static method of vec
Returns: boolean - True if vectors a and b are equal, false otherwise
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| b | vec | Vector b |
Kind: static method of vec
Returns: number - The angle of vector a in radians
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
Kind: static method of vec
Returns: vec - A copy of vector a
| Param | Type | Description |
| --- | --- | --- |
| a | vec | The vector to copy |
Kind: static method of vec
Returns: vec - Vector a mapped through f
| Param | Type | Description |
| --- | --- | --- |
| a | vec | Vector a |
| f | vectorMapCallback | The function to call on each component of the vector |
Kind: static method of vec
Returns: string - A string representation of the vector
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | vec | | The vector to convert |
| [s] | string | "', '" | The separator string |
numberKind: global typedef
Returns: number - The mapped component
| Param | Type | Description |
| --- | --- | --- |
| value | number | The component value |
| label | 'x' \| 'y' | The component label (x or y) |
ObjectKind: global typedef
Properties
| Name | Type | Description |
| --- | --- | --- |
| m | number | The number of rows in the matrix |
| n | number | The number of columns in the matrix |
| entries | Array.<number> | The matrix values |
* mat : Object
* .identity(n) ⇒ mat
* .get(a, i, j) ⇒ number
* .set(a, i, j, v)
* .row(a, m) ⇒ Array.<number>
* .col(a, n) ⇒ Array.<number>
* .add(a, b) ⇒ mat
* .sub(a, b) ⇒ mat
* .mul(a, b) ⇒ mat \| boolean
* .scale(a, b) ⇒ mat
* .trans(a) ⇒ mat
* .minor(a, i, j) ⇒ mat \| boolean
* .det(a) ⇒ number \| boolean
* .nor(a) ⇒ mat \| boolean
* .adj(a) ⇒ mat
* .inv(a) ⇒ mat \| boolean
* .eq(a, b) ⇒ boolean
* .cpy(a) ⇒ mat
* .map(a, f) ⇒ mat
* [.str(a, [ms], [ns])](#mat.str) ⇒ string
Kind: static method of mat
Returns: mat - An identity matrix
| Param | Type | Description |
| --- | --- | --- |
| n | number | The size of the matrix |
Kind: static method of mat
Returns: number - The value at position (i, j) in matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| i | number | The row offset |
| j | number | The column offset |
Kind: static method of mat
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| i | number | The row offset |
| j | number | The column offset |
| v | number | The value to set in matrix a |
Kind: static method of mat
Returns: Array.<number> - Row m from matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| m | number | The row offset |
Kind: static method of mat
Returns: Array.<number> - Column n from matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| n | number | The column offset |
Kind: static method of mat
Returns: mat - a + b
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat - a - b
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat \| boolean - ab or false if the matrices cannot be multiplied
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat - a * b
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | number | Scalar b |
Kind: static method of mat
Returns: mat - A transposed matrix
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to transpose |
Kind: static method of mat
Returns: mat \| boolean - The (i, j) minor of matrix a or false if the matrix is not square
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| i | number | The row offset |
| j | number | The column offset |
Kind: static method of mat
Returns: number \| boolean - |a| or false if the matrix is not square
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
Kind: static method of mat
Returns: mat \| boolean - ^a or false if the matrix is not square
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to normalise |
Kind: static method of mat
Returns: mat - The adjugate of a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix from which to get the adjugate |
Kind: static method of mat
Returns: mat \| boolean - a^-1 or false if the matrix has no inverse
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to invert |
Kind: static method of mat
Returns: boolean - True if matrices a and b are identical, false otherwise
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| b | mat | Matrix b |
Kind: static method of mat
Returns: mat - A copy of matrix a
| Param | Type | Description |
| --- | --- | --- |
| a | mat | The matrix to copy |
Kind: static method of mat
Returns: mat - Matrix a mapped through f
| Param | Type | Description |
| --- | --- | --- |
| a | mat | Matrix a |
| f | matrixMapCallback | The function to call on each entry of the matrix |
Kind: static method of mat
Returns: string - A string representation of the matrix
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| a | mat | | The matrix to convert |
| [ms] | string | "', '" | The separator string for columns |
| [ns] | string | "'\\n'" | The separator string for rows |
numberKind: global typedef
Returns: number - The mapped entry
| Param | Type | Description |
| --- | --- | --- |
| value | number | The entry value |
| index | number | The entry index |
| entries | Array.<number> | The array of matrix entries |