void float2::Orthogonalize(const float2 &a, float2 &b) { assume(!a.IsZero()); b -= a.Dot(b) / a.Length() * a; }
void float2::Orthonormalize(float2 &a, float2 &b) { assume(!a.IsZero()); a.Normalize(); b -= a.Dot(b) * a; }
float2 float2::ProjectTo(const float2 &direction) const { assume(!direction.IsZero()); return direction * this->Dot(direction) / direction.LengthSq(); }