internal Direction( IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber x, TAlgebraicNumber y) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } if (x is null) { throw new ArgumentNullException(nameof(x)); } if (y is null) { throw new ArgumentNullException(nameof(y)); } if (calculator.IsZero(x) && calculator.IsZero(y)) { throw new ArgumentException( "Both components of the direction cannot be simultaneously zero.", nameof(y)); } _calculator = calculator; X = x; Y = y; }
public ConvolutionFactory(IAlgebraicNumberCalculator <TAlgebraicNumber> algebraicNumberCalculator) { AlgebraicNumberCalculator = algebraicNumberCalculator ?? throw new ArgumentNullException(nameof(algebraicNumberCalculator)); Zero = algebraicNumberCalculator.FromInt(0); One = algebraicNumberCalculator.FromInt(1); }
public static bool IsZero <TAlgebraicNumber>( this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber number) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } return(calculator.Sign(number) == 0); }
public static TAlgebraicNumber Max <TAlgebraicNumber>( this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber first, TAlgebraicNumber second) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } return(calculator.IsStrictlySmallerThan(first, second) ? second : first); }
public static bool IsStrictlySmallerThan <TAlgebraicNumber>( this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber number1, TAlgebraicNumber number2) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } return(calculator.IsStrictlyPositive(calculator.Subtract(number2, number1))); }
public static bool AreEqual <TAlgebraicNumber>( this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber number1, TAlgebraicNumber number2) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } return(calculator.IsZero(calculator.Subtract(number2, number1))); }
public static TAlgebraicNumber Abs <TAlgebraicNumber>( this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber number) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } return(calculator.IsStrictlyNegative(number) ? calculator.Opposite(number) : number); }
internal Segment( IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, Point <TAlgebraicNumber> start, Point <TAlgebraicNumber> end, Direction <TAlgebraicNumber> startTangentDirection, Direction <TAlgebraicNumber> endTangentDirection, Fraction weight) : base(calculator, start, end, startTangentDirection, endTangentDirection, weight) { NormalDirection = new Direction <TAlgebraicNumber>( Calculator, Calculator.Opposite(startTangentDirection.Y), startTangentDirection.X); }
protected Tracing( IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, Point <TAlgebraicNumber> start, Point <TAlgebraicNumber> end, Direction <TAlgebraicNumber> startTangentDirection, Direction <TAlgebraicNumber> endTangentDirection, Fraction weight) { Calculator = calculator ?? throw new ArgumentNullException(nameof(start)); Start = start ?? throw new ArgumentNullException(nameof(start)); End = end ?? throw new ArgumentNullException(nameof(end)); StartTangentDirection = startTangentDirection ?? throw new ArgumentNullException(nameof(startTangentDirection)); EndTangentDirection = endTangentDirection ?? throw new ArgumentNullException(nameof(endTangentDirection)); Weight = weight; }
public static bool AreClose <TAlgebraicNumber>( this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber number1, TAlgebraicNumber number2, TAlgebraicNumber tolerance) { if (calculator is null) { throw new ArgumentNullException(nameof(calculator)); } var absoluteDifference = calculator.Abs(calculator.Subtract(number2, number1)); return(calculator.IsSmallerThan(absoluteDifference, tolerance)); }
internal Arc( IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, Point <TAlgebraicNumber> center, DirectionRange <TAlgebraicNumber> directions, TAlgebraicNumber radius, Point <TAlgebraicNumber> start, Point <TAlgebraicNumber> end, Direction <TAlgebraicNumber> startTangentDirection, Direction <TAlgebraicNumber> endTangentDirection, Fraction weight) : base(calculator, start, end, startTangentDirection, endTangentDirection, weight) { Center = center ?? throw new ArgumentNullException(nameof(center)); Directions = directions ?? throw new ArgumentNullException(nameof(directions)); Radius = radius ?? throw new ArgumentNullException(nameof(radius)); }
internal DirectionRange( IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, Direction <TAlgebraicNumber> start, Direction <TAlgebraicNumber> end, Orientation orientation) { _calculator = calculator ?? throw new ArgumentNullException(nameof(calculator)); Start = start ?? throw new ArgumentNullException(nameof(start)); End = end ?? throw new ArgumentNullException(nameof(end)); if (!Enum.IsDefined(typeof(Orientation), orientation)) { throw new InvalidEnumArgumentException( nameof(orientation), (int)orientation, typeof(Orientation)); } Orientation = orientation; }
public void SetUp() { var factory = new ConvolutionFactory(); _calculator = factory.AlgebraicNumberCalculator; }
public void SetUp() => _calculator = new DoubleAlgebraicNumberCalculator(zeroTolerance: 1e-10);
public void SetUp() { _calculator = new DoubleAlgebraicNumberCalculator(); _subject = new Point <double>(_calculator, x: 3.5, y: 10.7); }
internal Point(IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber x, TAlgebraicNumber y) { _calculator = calculator ?? throw new ArgumentNullException(nameof(calculator)); X = x ?? throw new ArgumentNullException(nameof(x)); Y = y ?? throw new ArgumentNullException(nameof(y)); }
this IAlgebraicNumberCalculator <TAlgebraicNumber> calculator, TAlgebraicNumber first, TAlgebraicNumber second) { if (calculator is null)