public static Mat3 Invert(Mat3 m) { float determinant = 1 / m.Determinant(); return(new Mat3 ( new Vec3 ( (m.y.y * m.z.z - m.y.z * m.z.y) * determinant, (m.x.z * m.z.y - m.z.z * m.x.y) * determinant, (m.x.y * m.y.z - m.y.y * m.x.z) * determinant ), new Vec3 ( (m.y.z * m.z.x - m.y.x * m.z.z) * determinant, (m.x.x * m.z.z - m.x.z * m.z.x) * determinant, (m.x.z * m.y.x - m.x.x * m.y.z) * determinant ), new Vec3 ( (m.y.x * m.z.y - m.y.y * m.z.x) * determinant, (m.x.y * m.z.x - m.x.x * m.z.y) * determinant, (m.x.x * m.y.y - m.x.y * m.y.x) * determinant ) )); }