private static Maybe<DoubleVector2> IntersectVerticalAndNonVertical(INonVertical first, IVertical second) { return MaybeUtil.Just(new DoubleVector2(second.X, first.Y(second.X))); }
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))); }