public static Vector Projection(this Vector of, Vector onto) => (onto.Dot(of) / onto.MagnitudeSquared()).Scale(onto);
public static double Magnitude(this Vector v1) => Sqrt(v1.MagnitudeSquared());