public static Matrix2x2d PolarDecomposition(Matrix2x2d m) { Matrix2x2d q = m + new Matrix2x2d(m.m11, -m.m10, -m.m01, m.m00); Vector2d c0 = q.GetColumn(0); Vector2d c1 = q.GetColumn(1); double s = c0.Magnitude; q.SetColumn(0, c0 / s); q.SetColumn(1, c1 / s); return(q); }
/// <summary> /// The Inverse of the matrix copied into mInv. /// Returns false if the matrix has no inverse. /// A matrix multipled by its inverse is the idenity. /// </summary> public bool TryInverse(ref Matrix2x2d mInv) { double det = Determinant; if (Math.Abs(det) <= 1e-09) { return(false); } double invDet = 1.0 / det; mInv.m00 = m11 * invDet; mInv.m01 = -m01 * invDet; mInv.m10 = -m10 * invDet; mInv.m11 = m00 * invDet; return(true); }
/// <summary> /// Are these matrices equal. /// </summary> public bool EqualsWithError(Matrix2x2d m, double eps) { if (Math.Abs(m00 - m.m00) > eps) { return(false); } if (Math.Abs(m10 - m.m10) > eps) { return(false); } if (Math.Abs(m01 - m.m01) > eps) { return(false); } if (Math.Abs(m11 - m.m11) > eps) { return(false); } return(true); }
/// <summary> /// A matrix copied from the matrix m. /// </summary> public Matrix2x2d(Matrix2x2d m) { m00 = m.m00; m01 = m.m01; m10 = m.m10; m11 = m.m11; }
/// <summary> /// Are these matrices equal. /// </summary> public bool Equals(Matrix2x2d mat) { return(this == mat); }