@design-automation/mobius-inline-funcs
Version:
Mobius Spatial Information Model
31 lines • 1.99 kB
JavaScript
import * as vectors from '../../libs/vectors';
import { getArrDepth } from '../../libs/arrs';
// ================================================================================================
/**
* Calculates a normalised vector with a direction that is the average of the directions of the input vectors.
* \n
* The result is equivalent to:
* `vec = vecNorm(vecSum(vecNorm(v)))`
* \n
* Note that if the input vectors cancel each other out, the result will be `[0,0,0]`.
* \n
* The function can be called in two ways:
* `vec = vecAvgDir([vec1, vec2, vec3])`
* `vec = vecAvgDir(vec1, vec2, vec3)`
* \n
* @param v A list of input vectors or just multiple vectors.
* @returns The result vector.
*/
export function vecAvgDir(...v) {
const depth1 = getArrDepth(v);
if (depth1 > 2) {
// @ts-ignore
v = v.slice().flat(depth1 - 2);
}
else if (depth1 < 2) {
throw new Error('Error averaging vectors: The vectors are bad.' + JSON.stringify(v));
}
// return the average vector
return vectors.vecAvgDir(v);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjQXZnRGlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lubGluZS92ZWMvdmVjQXZnRGlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLG1HQUFtRztBQUNuRzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNGLE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBRyxDQUFTO0lBQ25DLE1BQU0sTUFBTSxHQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDWixhQUFhO1FBQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2xDO1NBQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hGO0lBQ0QsNEJBQTRCO0lBQzVCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVMsQ0FBQztBQUN4QyxDQUFDIn0=