void float4::Orthonormalize(float4 &a, float4 &b) { assume(!a.IsZero()); assume(!b.IsZero()); a.Normalize(); b -= b.ProjectToNorm(a); b.Normalize(); }
float4 float4::ProjectTo(const float4 &target) const { assume(!target.IsZero()); assume(this->IsWZeroOrOne()); return target * (this->Dot(target) / target.LengthSq()); }