Movements are unconstrained: subclasses constraining them override this function, starting from the position that it returns.