The similar_direction function could be erroneous for corner cases, refactored it out. This also makes it a bit less dependent on infinite_line (cartesian)