invert method
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,
);
}