public double Determinant() { Matrix2 D = SubmatrixD(); double detD = D.Determinant(); Matrix2 invD = D.Inverse(); Matrix2 iA = (SubmatrixA() - SubmatrixB() * invD * SubmatrixC()); return(detD * iA.Determinant()); }
public bool Intersect(LineSegment l, out Vector2 pt, out Vector2 K) { Vector2 P = P1 - P0; Vector2 S = l.P1 - l.P0; Matrix2 A = new Matrix2(P.X, -S.X, P.Y, -S.Y); if (Math.Abs(A.Determinant()) < 1e-10) { pt = default(Vector2); K = default(Vector2); return false; } K = A.Inverse()*(l.P0 - P0); if (K.X >= 0 && K.X <= 1 && K.Y >= 0 && K.Y <= 1) { pt = P0 + P*K.X; return true; } else { pt = default(Vector2); return false; } }