docs: def get_projection(self, axis):
          """ Return the projection of this vector onto the given axis.  The 
          axis does not need to be normalized. """
          scale = axis.dot(self) / axis.dot(axis)
          return axis * scale