Beispiel #1
0
        public static IInterval <TPoint, TPointComparer> Intersect <TPoint, TPointComparer>(
            this IBoundaryInterval <TPoint, TPointComparer> interval,
            IBoundaryInterval <TPoint, TPointComparer> otherInterval,
            TPointComparer pointComparer)
            where TPoint : notnull
            where TPointComparer : IComparer <TPoint>, new()
        {
            var maxLowerBoundary = interval.LowerBoundary()
                                   .Compare(
                otherInterval.LowerBoundary(),
                pointComparer) >= 0
                ? interval.LowerBoundary()
                : otherInterval.LowerBoundary();

            var minLowerBoundary = interval.UpperBoundary()
                                   .Compare(
                otherInterval.UpperBoundary(),
                pointComparer) <= 0
                ? interval.UpperBoundary()
                : otherInterval.UpperBoundary();

            return(IntervalFactory.Build(
                       lowerBoundary: maxLowerBoundary,
                       upperBoundary: minLowerBoundary,
                       pointComparer: pointComparer));
        }
Beispiel #2
0
 public IntervalValuePair(
     IBoundaryInterval <TPoint, TPointComparer> interval,
     TValue value)
 {
     this.Interval = interval;
     this.Value    = value;
 }
Beispiel #3
0
 private static bool PointOnBoundaryOrWithinInterval <TPoint, TPointComparer>(
     IBoundaryInterval <TPoint, TPointComparer> boundaryInterval,
     TPoint point,
     TPointComparer pointComparer)
     where TPoint : notnull
     where TPointComparer : IComparer <TPoint>, new()
 {
     return(boundaryInterval.Contains(point, pointComparer) ||
            boundaryInterval.IsBoundaryPoint(point, pointComparer));
 }
 public static bool IsBoundaryPoint <TPoint, TPointComparer>(
     this IBoundaryInterval <TPoint, TPointComparer> boundaryInterval,
     TPoint point,
     TPointComparer pointComparer)
     where TPoint : notnull
     where TPointComparer : IComparer <TPoint>, new()
 {
     return(boundaryInterval
            .MapBoundaryPoints(p => p)
            .Any(p => pointComparer.Compare(p, point) == 0));
 }
 public static IUpperBoundary <TPoint, TPointComparer> UpperBoundary <TPoint, TPointComparer>(
     this IBoundaryInterval <TPoint, TPointComparer> boundaryInterval)
     where TPoint : notnull
     where TPointComparer : IComparer <TPoint>, new() => boundaryInterval switch
 {