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