Use the slope as the maximum point distance when looking for line intersections

This way, shape.py always finds the points that are suitable for clustering.
Start the shape angle at the object's symmetry axis

This makes more sense because the goal is to be rotation invariant (to a certain degree)