/// <summary>
/// Solve A * x = b, where b is a column vector. This is more efficient than computing the inverse
/// in one-shot cases.
/// </summary>
/// <param name="b"></param>
/// <param name="result">the result</param>
public void Solve33ToOut(Vec3 b, Vec3 result)
{
Debug.Assert(b != result);
Vec3.CrossToOutUnsafe(Ey, Ez, result);
float det = Vec3.Dot(Ex, result);
if (det != 0.0f)
{
det = 1.0f / det;
}
Vec3.CrossToOutUnsafe(Ey, Ez, result);
float x = det * Vec3.Dot(b, result);
Vec3.CrossToOutUnsafe(b, Ez, result);
float y = det * Vec3.Dot(Ex, result);
Vec3.CrossToOutUnsafe(Ey, b, result);
float z = det * Vec3.Dot(Ex, result);
result.X = x;
result.Y = y;
result.Z = z;
}