AM: I think this was an attempt to optimize for speed
AM: use rc.center()
AM: ManyBody() accepts a list of arities
AM: close to zero is good enough
AM: Move(q, f) translates and rotates the results of f(x)
AM: renames, comments, explicit doubles, whitespace
AM: whitespace
AM: Affine() can be derived from a linear f(x) and x
AM: do not expect exact zeroes
AM: choose the signs for the axes specifically
AM: raise ZeroDivisionError if cross product vanishes
AM: workaround for linear systems, define axes differently
AM: import cross() once
AM: max() is only used in doctests
AM: somethig was wrong here
AM: relate (a, b) computes translation/rotation a -> b
AM: format comments
AM: add comment on how to apply rotmat() to vectors
AM: comment on relation of rot2quat() and dcm2quat() from Matlab
AM: rename steepest_descent.py and related