UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

30 lines (26 loc) 888 B
const fromValues = require('../vec2/fromValues') /** * Multiply a 2D vector by a matrix (interpreted as 2 row, 1 column). * * Calculation: result = v*M, where the fourth element is set to 1. * @param {vec2} vector - input vector * @param {mat4} matrix - input matrix * @returns {vec2} a new vector * @alias module:modeling/maths/mat4.rightMultiplyVec2 */ const rightMultiplyVec2 = (vector, matrix) => { const [v0, v1] = vector const v2 = 0 const v3 = 1 let x = v0 * matrix[0] + v1 * matrix[1] + v2 * matrix[2] + v3 * matrix[3] let y = v0 * matrix[4] + v1 * matrix[5] + v2 * matrix[6] + v3 * matrix[7] const w = v0 * matrix[12] + v1 * matrix[13] + v2 * matrix[14] + v3 * matrix[15] // scale such that fourth element becomes 1: if (w !== 1) { const invw = 1.0 / w x *= invw y *= invw } return fromValues(x, y) } module.exports = rightMultiplyVec2