invert2 method

Matrix3 invert2(
  1. Matrix3 m
)

Invert matrix m

Implementation

Matrix3 invert2(Matrix3  m ) {
  Float32List te = storage, tm = m.storage;
  double a00 = tm[0], a10 = tm[3], a20 = tm[6],
  a01 = tm[1], a11 = tm[4], a21 = tm[7],
  a02 = tm[2], a12 = tm[5], a22 = tm[8],
  b01 = a22 * a11 - a12 * a21,
  b11 = -a22 * a10 + a12 * a20,
  b21 = a21 * a10 - a11 * a20,
  det = a00 * b01 + a01 * b11 + a02 * b21;

  if ( det == 0 ) {
    //print( "can't invert matrix, determinant is 0");
    setIdentity();
    return this;
  }

  det = 1.0 / det;
  te[0] = b01 * det;
  te[1] = (-a22 * a01 + a02 * a21) * det;
  te[2] = (a12 * a01 - a02 * a11) * det;
  te[3] = b11 * det;
  te[4] = (a22 * a00 - a02 * a20) * det;
  te[5] = (-a12 * a00 + a02 * a10) * det;
  te[6] = b21 * det;
  te[7] = (-a21 * a00 + a01 * a20) * det;
  te[8] = (a11 * a00 - a01 * a10) * det;
  return this;
}