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