better orthogonal calculation