UNPKG

@design-automation/mobius-inline-funcs

Version:
47 lines 3.49 kB
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==