Skip to content

Basic Geometry and Linear Algebra library

License

Notifications You must be signed in to change notification settings

learosema/ella-math

Repository files navigation

ella-math

A dependency-free Geometry and linear algebra library that provides basic vector and matrix calculus operations, written in TypeScript.

Features

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

Install and usage

You can either import ella via NPM or directly use it via script tag.

NPM:

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');

Directly in the browser

Add this script tag: <script src="https://unpkg.com/ella-math@latest/dist/ella.umd.js"></script>

const{ Vec, Mat }=Ella;

Demos

About

Basic Geometry and Linear Algebra library

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •