Function inverse

Compute the inverse of a matrix

M inverse(M) (
  in M m
)
if (isMat2!M);

M inverse(M) (
  in M m
)
if (isMat3!M);

M inverse(M) (
  in M m
)
if (isMat4!M);

Example

/// Example from https://en.wikipedia.org/wiki/Gaussian_elimination
const m = FMat3(
    2, -1, 0,
    -1, 2, -1,
    0, -1, 2
);
const invM = inverse(m);

import gfx.math.approx : approxUlp;
assert(approxUlp(invM, FMat3(
    0.75f, 0.5f, 0.25f,
    0.5f,  1f,   0.5f,
    0.25f, 0.5f, 0.75f
)));
assert(approxUlp(inverse(invM), m));

Example

import gfx.math.transform : translation;
import gfx.math.approx : approxUlpAndAbs;

const trM = translation!float(3, 4, 5);
const expected = translation!float(-3, -4, -5);
const inv = inverse(trM);

assert(approxUlpAndAbs( inv, expected ));
assert(approxUlpAndAbs( inverse(inv), trM ));
assert(approxUlpAndAbs( inv * trM, FMat4.identity ));