@design-automation/mobius-inline-funcs
Version:
Mobius Spatial Information Model
47 lines • 3.49 kB
JavaScript
import * as vectors from '../../libs/vectors';
import { getArrDepth } from '../../libs/arrs';
// ================================================================================================
/**
* Calculates the cross product of two vectors.
* \n
* Overloaded with 4 cases.
* \n
* - v1 can be one vector, and v2 can be one vector.
* - v1 can be a list of vectors, and v2 can be one vector.
* - v1 can be one vector, and v2 can be a list of vectors.
* - v1 can be a list of vectors, and v2 can be a list of vectors. These lists should have the **same size**.
* @param v1 The first vector or list of vectors.
* @param v2 The second vector or list of vectors.
* @returns The resultant cross product, a list of 3 numbers.
*/
export function vecCross(v1, v2) {
// overloaded case
const depth1 = getArrDepth(v1);
const depth2 = getArrDepth(v2);
if (depth1 === 2 || depth2 === 2) {
if (depth2 === 1) {
// only v1 is Txyz[]
return v1.map(v1_val => vectors.vecCross(v1_val, v2));
}
else if (depth1 === 1) {
// only v2 is Txyz[]
return v2.map(v2_val => vectors.vecCross(v1, v2_val));
}
else {
// both v1 and v2 are Txyz[], they must be equal length
if (v1.length === v2.length) {
const vecs = [];
for (let i = 0; i < v1.length; i++) {
vecs.push(vectors.vecCross(v1[i], v2[i]));
}
return vecs;
}
else {
throw new Error('Error calculating cross product of two lists of vectors: The two lists must be of equal length.');
}
}
}
// normal case, both v1 and v2 are Txyz
return vectors.vecCross(v1, v2);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjQ3Jvc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5saW5lL3ZlYy92ZWNDcm9zcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxtR0FBbUc7QUFDbkc7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0YsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUFlLEVBQUUsRUFBZTtJQUN0RCxrQkFBa0I7SUFDbEIsTUFBTSxNQUFNLEdBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sTUFBTSxHQUFXLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDZCxvQkFBb0I7WUFDcEIsT0FBUSxFQUFhLENBQUMsR0FBRyxDQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFjLEVBQUUsRUFBVSxDQUFTLENBQUMsQ0FBQztTQUM5RjthQUFNLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixvQkFBb0I7WUFDcEIsT0FBUSxFQUFhLENBQUMsR0FBRyxDQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFVLEVBQUUsTUFBYyxDQUFTLENBQUMsQ0FBQztTQUM5RjthQUFNO1lBQ0gsdURBQXVEO1lBQ3ZELElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFO2dCQUN6QixNQUFNLElBQUksR0FBVyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQVMsQ0FBUyxDQUFFLENBQUM7aUJBQ3ZFO2dCQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2Y7aUJBQU07Z0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FDWCxpR0FBaUcsQ0FBQyxDQUFDO2FBQzFHO1NBQ0o7S0FDSjtJQUNELHVDQUF1QztJQUN2QyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBVSxFQUFFLEVBQVUsQ0FBUyxDQUFDO0FBQzVELENBQUMifQ==