invert method

Transform2D? invert()

Returns the inverse transform, or null if the matrix is singular.

This method is numerically robust: it returns null for near-singular matrices and for non-finite components to avoid unstable results (e.g. huge coefficients or NaN/Infinity).

Implementation

Transform2D? invert() {
  if (!a.isFinite ||
      !b.isFinite ||
      !c.isFinite ||
      !d.isFinite ||
      !tx.isFinite ||
      !ty.isFinite) {
    return null;
  }
  if (isNearSingular2x2(a, b, c, d)) return null;
  final det = a * d - b * c;
  final invDet = 1.0 / det;
  final invA = d * invDet;
  final invB = -b * invDet;
  final invC = -c * invDet;
  final invD = a * invDet;
  final invTx = -(invA * tx + invC * ty);
  final invTy = -(invB * tx + invD * ty);
  if (!invA.isFinite ||
      !invB.isFinite ||
      !invC.isFinite ||
      !invD.isFinite ||
      !invTx.isFinite ||
      !invTy.isFinite) {
    return null;
  }
  return Transform2D(
    a: invA,
    b: invB,
    c: invC,
    d: invD,
    tx: invTx,
    ty: invTy,
  );
}