A dependency-free Geometry and linear algebra library that provides basic vector and matrix calculus operations, written in TypeScript.
Features:
- vector addition, subtraction, scalar multiplication, dot product, cross product
- calculate vector length
- normalize vector
- matrix multiplication, determinant, inverse implementations for mat2, mat3, mat4
- translation and projection matrices (perspective and orthogonal projection)
- matrix vector multiplication
- basic geometry shapes
You can either import ella via NPM or directly use it via script tag.
First, run: npm i ella-math
import{Vec,Mat,Mat4}from'ella-math';consta=newVec(1,2,3);constb=newVec(2,3,4);console.log('a + b = ',a.add(b));console.log('a dot b = ',a.dot(b));console.log('a cross b = ',a.cross(b));// Define a matrix// heads up: it's the other way round as you would write it down on paper// prettier-ignoreconstm=newMat([1,2,3,// column 14,5,6,// column 27,8,9,// column 3]);constmDet=m.determinant();// 0constmInv=m.inverse();console.assert(mInv.isFinite()===false,'As the determinant of m is 0, there is no inverse of m.');constmA=Mat4.identity();// create a 4x4 translation matrixconstmB=Mat4.translation(-1,-2,-3);// create a 4x4 scaling matrixconstmC=Mat4.scaling(2,4,6);// matrix multiplicationconstmD=mA.mul(mB);console.assert(mD.equals(mB),'mA * mB should equal mB');constmE=mD.mul(mC);// matrix division is like multiplication with its inverseconstmF=mE.div(mC);console.assert(mF.isFinite(),'mF should be finite.');console.assert(mF.equals(mD),'mF should be equal to mD');// the equality check may sometimes fail in JS due// to floating point arithmetics (.1+.2 !== .3 issue)// roughlyEquals checks with a tolerance of 1e-14console.assert(mF.roughlyEquals(mD),'mF should be roughly equal to mD');Add this script tag: <script src="https://unpkg.com/ella-math@latest/dist/ella.umd.js"></script>
const{ Vec, Mat }=Ella;