Source: https://sites.math.northwestern.edu/~sweng/teaching/2019w/math240/notes/18 Orthogonal Projection and the Gram-Schmidt Process.pdf