0) Inside DistanceAlgo and IntersectionAlgo... use Vector::_Dist_ to find a distance between 2 points w/o dimensionality check. Use Vector::Dist to for w/ dimensionality check.
1) I added a check for 2 points in Line class to be distinct.
2) I added a Dir() function in DirectedLine. Please use it when direction matters (it should, since otherwise one should use Line object)
3) Optimized DistanceAlgo by replacing some object instantiation by using reference (creating Vector instance is not very cheap when we care speed, so use reference when possible... for instance, to use a start point of a line segment, "auto const& pt = hline.Start()" uses less resource than "Vector pt = hline.Start();")
4) Introduced kMAX_DOUBLE and kMIN_DOUBLE ... useful for setting default max/min values. kMIN_DOUBLE is the most negative value btw. Not 0.

--kazu