inverse static method

List<double> inverse(
  1. List<double> matrix
)

Implementation

static List<double> inverse(List<double> matrix) {
  var det = determinant(matrix);
  if (_isZero(det)) {
    return matrix;
  }
  var m00 = matrix[0];
  var m01 = matrix[1];
  var m02 = matrix[2];
  var m03 = matrix[3];
  var m10 = matrix[4];
  var m11 = matrix[5];
  var m12 = matrix[6];
  var m13 = matrix[7];
  var m20 = matrix[8];
  var m21 = matrix[9];
  var m22 = matrix[10];
  var m23 = matrix[11];
  var m30 = matrix[12];
  var m31 = matrix[13];
  var m32 = matrix[14];
  var m33 = matrix[15];
  return [
    (m12 * m23 * m31 -
            m13 * m22 * m31 +
            m13 * m21 * m32 -
            m11 * m23 * m32 -
            m12 * m21 * m33 +
            m11 * m22 * m33) /
        det,
    (m03 * m22 * m31 -
            m02 * m23 * m31 -
            m03 * m21 * m32 +
            m01 * m23 * m32 +
            m02 * m21 * m33 -
            m01 * m22 * m33) /
        det,
    (m02 * m13 * m31 -
            m03 * m12 * m31 +
            m03 * m11 * m32 -
            m01 * m13 * m32 -
            m02 * m11 * m33 +
            m01 * m12 * m33) /
        det,
    (m03 * m12 * m21 -
            m02 * m13 * m21 -
            m03 * m11 * m22 +
            m01 * m13 * m22 +
            m02 * m11 * m23 -
            m01 * m12 * m23) /
        det,
    (m13 * m22 * m30 -
            m12 * m23 * m30 -
            m13 * m20 * m32 +
            m10 * m23 * m32 +
            m12 * m20 * m33 -
            m10 * m22 * m33) /
        det,
    (m02 * m23 * m30 -
            m03 * m22 * m30 +
            m03 * m20 * m32 -
            m00 * m23 * m32 -
            m02 * m20 * m33 +
            m00 * m22 * m33) /
        det,
    (m03 * m12 * m30 -
            m02 * m13 * m30 -
            m03 * m10 * m32 +
            m00 * m13 * m32 +
            m02 * m10 * m33 -
            m00 * m12 * m33) /
        det,
    (m02 * m13 * m20 -
            m03 * m12 * m20 +
            m03 * m10 * m22 -
            m00 * m13 * m22 -
            m02 * m10 * m23 +
            m00 * m12 * m23) /
        det,
    (m11 * m23 * m30 -
            m13 * m21 * m30 +
            m13 * m20 * m31 -
            m10 * m23 * m31 -
            m11 * m20 * m33 +
            m10 * m21 * m33) /
        det,
    (m03 * m21 * m30 -
            m01 * m23 * m30 -
            m03 * m20 * m31 +
            m00 * m23 * m31 +
            m01 * m20 * m33 -
            m00 * m21 * m33) /
        det,
    (m01 * m13 * m30 -
            m03 * m11 * m30 +
            m03 * m10 * m31 -
            m00 * m13 * m31 -
            m01 * m10 * m33 +
            m00 * m11 * m33) /
        det,
    (m03 * m11 * m20 -
            m01 * m13 * m20 -
            m03 * m10 * m21 +
            m00 * m13 * m21 +
            m01 * m10 * m23 -
            m00 * m11 * m23) /
        det,
    (m12 * m21 * m30 -
            m11 * m22 * m30 -
            m12 * m20 * m31 +
            m10 * m22 * m31 +
            m11 * m20 * m32 -
            m10 * m21 * m32) /
        det,
    (m01 * m22 * m30 -
            m02 * m21 * m30 +
            m02 * m20 * m31 -
            m00 * m22 * m31 -
            m01 * m20 * m32 +
            m00 * m21 * m32) /
        det,
    (m02 * m11 * m30 -
            m01 * m12 * m30 -
            m02 * m10 * m31 +
            m00 * m12 * m31 +
            m01 * m10 * m32 -
            m00 * m11 * m32) /
        det,
    (m01 * m12 * m20 -
            m02 * m11 * m20 +
            m02 * m10 * m21 -
            m00 * m12 * m21 -
            m01 * m10 * m22 +
            m00 * m11 * m22) /
        det
  ];
}