private static Maybe<DoubleVector2> IntersectNonVerticals(INonVertical first, INonVertical second)
        {
            var perDiff = first.DyDx - second.DyDx;

            if (perDiff == 0)
                return new Nothing<DoubleVector2>();

            var x = (second.Y0 - first.Y0)/perDiff;
            return MaybeUtil.Just(new DoubleVector2(x, first.Y(x)));
        }
 private static Maybe<DoubleVector2> IntersectVerticalAndNonVertical(INonVertical first, IVertical second)
 {
     return MaybeUtil.Just(new DoubleVector2(second.X, first.Y(second.X)));
 }