private ConvexBoundBuilder(Func <Vector, double> monitoredFunction, Func <Vector, double> compute, Dictionary <int, ClosestPointFromPoint> getClosestPointOfNorm, double threshold, ConvexBound.Type type)
 {
     MonitoredFunction     = monitoredFunction;
     Compute               = compute;
     GetClosestPointOfNorm = getClosestPointOfNorm;
     Threshold             = threshold;
     Type = type;
 }
 public static ConvexBoundBuilder Create(Func <Vector, double> monitoredFuntion, Func <Vector, double> computeFunction, ConvexBound.Type type, double threhsold)
 => new ConvexBoundBuilder(monitoredFuntion, computeFunction, new Dictionary <int, ClosestPointFromPoint>(2), threhsold, type);
 private static ConvexBound ToConvexBound(this LineHalfPlane @this, Func <Vector, double> monitoredFunction, ConvexBound.Type type, double threshold)
 {
     return(ConvexBoundBuilder.Create(monitoredFunction, @this.Compute, type, threshold)
            .WithDistanceNorm(1, @this.ClosestPointL1)
            .WithDistanceNorm(2, @this.ClosestPointL2)
            .ToConvexBound());
 }