# Point

A point of a function. Defined only in Time.

From unit structure defined in [BT08] Section 4.1

`public sealed class Point : Element, IToCodeString, Unipi.Nancy.Utility.IStableHashCode, System.IEquatable<Point>`

Inheritance Object → Element → Point

Implements IToCodeString, IStableHashCode, IEquatable<Point>

## Properties

**Type**

Type identification property for JSON (de)serialization.

`public string Type { get; }`

#### Property Value

**Time**

Time for which the point is defined.

`public Rational Time { get; }`

#### Property Value

**Value**

Value of the point.

`public Rational Value { get; }`

#### Property Value

**StartTime**

`public Rational StartTime { get; }`

#### Property Value

**EndTime**

`public Rational EndTime { get; }`

#### Property Value

**PointSlope**

Slope, w.r.t. origin, of the point.

`public Rational PointSlope { get; }`

#### Property Value

**IsInfinite**

True if the value of the point is $\pm\infty$.

`public bool IsInfinite { get; }`

#### Property Value

**IsPlusInfinite**

True if the value of the point is $+\infty$.

`public bool IsPlusInfinite { get; }`

#### Property Value

**IsMinusInfinite**

True if the value of the point is $-\infty$.

`public bool IsMinusInfinite { get; }`

#### Property Value

**IsZero**

True if the value of the point is 0.

`public bool IsZero { get; }`

#### Property Value

**IsOrigin**

True if the point is $(0, 0)$

`public bool IsOrigin { get; }`

#### Property Value

**Length**

Length in time of the element. If the element is a Segment, it is strictly greater than 0. If the element is a Point, it is equal to 0.

`public Rational Length { get; }`

#### Property Value

**IsFinite**

True if the element has finite value.

`public bool IsFinite { get; }`

#### Property Value

## Constructors

**Point(Rational, Rational)**

Constructor.

`public Point(Rational time, Rational value)`

#### Parameters

`time`

Rational

Time of the point.

`value`

Rational

Value of the point.

## Methods

**Zero(Rational)**

Constructs a point with 0 as value.

`public static Point Zero(Rational time)`

#### Parameters

`time`

Rational

Time of the point.

#### Returns

**Origin()**

Constructs a point in (0, 0).

`public static Point Origin()`

#### Returns

**PlusInfinite(Rational)**

Constructs a point with $+\infty$ as value.

`public static Point PlusInfinite(Rational time)`

#### Parameters

`time`

Rational

Time of the point.

#### Returns

**MinusInfinite(Rational)**

Constructs a point with $-\infty$ as value.

`public static Point MinusInfinite(Rational time)`

#### Parameters

`time`

Rational

Time of the point.

#### Returns

**ValueAt(Rational)**

`public Rational ValueAt(Rational time)`

#### Parameters

`time`

Rational

#### Returns

**IsDefinedFor(Rational)**

`public bool IsDefinedFor(Rational time)`

#### Parameters

`time`

Rational

#### Returns

**FromJson(String)**

Deserializes a Point.

`public static Point FromJson(string json)`

#### Parameters

`json`

String

#### Returns

**ToCodeString(Boolean, Int32)**

Returns a string containing C# code to create this Point. Useful to copy and paste from a debugger into another test or notebook for further investigation.

`public string ToCodeString(bool formatted, int indentation)`

#### Parameters

`formatted`

Boolean

`indentation`

Int32

#### Returns

**GetStableHashCode()**

`public int GetStableHashCode()`

#### Returns

**Scale(Rational)**

Scales the point by a multiplicative factor.

`public Element Scale(Rational scaling)`

#### Parameters

`scaling`

Rational

#### Returns

**Delay(Rational)**

`public Element Delay(Rational delay)`

#### Parameters

`delay`

Rational

#### Returns

**Anticipate(Rational)**

`public Element Anticipate(Rational time)`

#### Parameters

`time`

Rational

#### Returns

**VerticalShift(Rational)**

Shifts the point vertically by an additive factor.

`public Element VerticalShift(Rational shift)`

#### Parameters

`shift`

Rational

#### Returns

**Negate()**

`public Element Negate()`

#### Returns

**Inverse()**

`public Element Inverse()`

#### Returns

**Equals(Object)**

`public bool Equals(object obj)`

#### Parameters

`obj`

Object

#### Returns

**GetHashCode()**

`public int GetHashCode()`

#### Returns

**Equals(Point)**

`public bool Equals(Point other)`

#### Parameters

`other`

Point

#### Returns

**IsCertainlyAbove(Point, Point)**

Returns true if the first point has always value higher than the second one. Does not consider time overlapping.

`public static bool IsCertainlyAbove(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

**IsCertainlyAbove(Point)**

Returns true if the first point has always value higher than the second one. Does not consider time overlapping.

`public bool IsCertainlyAbove(Point point)`

#### Parameters

`point`

Point

#### Returns

**IsCertainlyBelow(Point, Point)**

Returns true if the first point has always value lower than the second one. Does not consider time overlapping.

`public static bool IsCertainlyBelow(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

**IsCertainlyBelow(Point)**

Returns true if the first point has always value lower than the second one. Does not consider time overlapping.

`public bool IsCertainlyBelow(Point point)`

#### Parameters

`point`

Point

#### Returns

**Addition(Element)**

Sums the Point with an overlapping Element.

`public Element Addition(Element element)`

#### Parameters

`element`

Element

#### Returns

Element

The element resulting from the sum.

#### Exceptions

ArgumentException

Thrown if the point and the element do not overlap.

**Addition(Point, Point)**

Sums two Points that are defined for the same time.

`public static Point Addition(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The point resulting from the sum.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Addition(Point)**

Sums two Points that are defined for the same time.

`public Point Addition(Point point)`

#### Parameters

`point`

Point

#### Returns

Point

The point resulting from the sum.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Addition(Point, Segment)**

Sums a Point to an overlapping Segment

`public static Point Addition(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Point

The point resulting from the sum.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Addition(Segment)**

Sums a Point to an overlapping Segment

`public Point Addition(Segment segment)`

#### Parameters

`segment`

Segment

#### Returns

Point

The point resulting from the sum.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Subtraction(Element)**

Subtracts the Point with an overlapping Element.

The operation does not enforce non-negative values.

`public Element Subtraction(Element element)`

#### Parameters

`element`

Element

#### Returns

Element

The element resulting from the subtraction.

#### Exceptions

ArgumentException

Thrown if the point and the element do not overlap.

**Subtraction(Point, Point)**

Subtracts two Points that are defined for the same time.

The operation does not enforce non-negative values.

`public static Point Subtraction(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The point resulting from the subtraction.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Subtraction(Point)**

Subtracts two Points that are defined for the same time.

The operation does not enforce non-negative values.

`public Point Subtraction(Point point)`

#### Parameters

`point`

Point

#### Returns

Point

The point resulting from the subtraction.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Subtraction(Point, Segment)**

Subtracts a Point to an overlapping Segment

The operation does not enforce non-negative values.

`public static Point Subtraction(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Point

The point resulting from the subtraction.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Subtraction(Segment)**

Subtracts a Point to an overlapping Segment

The operation does not enforce non-negative values.

`public Point Subtraction(Segment segment)`

#### Parameters

`segment`

Segment

#### Returns

Point

The point resulting from the subtraction.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Minimum(Element)**

Computes the minimum of the Point and the given Element over their overlapping part.

`public List<Element> Minimum(Element element)`

#### Parameters

`element`

Element

#### Returns

List<Element>

The s resulting from the minimum, wrapped in a list due to inheritance.

**Minimum(Point, Point)**

Computes the minimum of two Points that are defined at the same time.

`public static Point Minimum(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The point resulting from the minimum.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Minimum(Point)**

Computes the minimum of two Points that are defined at the same time.

`public Point Minimum(Point b)`

#### Parameters

`b`

Point

#### Returns

Point

The point resulting from the minimum.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Minimum(Point, Segment)**

Computes the minimum of a Point to an overlapping Segment.

`public static Point Minimum(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Point

The point resulting from the minimum.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Minimum(Segment)**

Computes the minimum of a Point to an overlapping Segment.

`public Point Minimum(Segment segment)`

#### Parameters

`segment`

Segment

Second operand

#### Returns

Point

The point resulting from the minimum.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Minimum(IReadOnlyList<Point>)**

Computes the minimum of a set of points.

`public static Point Minimum(IReadOnlyList<Point> points)`

#### Parameters

`points`

IReadOnlyList<Point>

Points of which the minimum has to be computed.

#### Returns

Point

The point resulting from the overall minimum.

#### Exceptions

ArgumentException

Thrown if the points do not overlap.

InvalidOperationException

Thrown if the set of points is empty.

**Maximum(Element)**

Computes the maximum of the Point and the given Element over their overlapping part.

`public List<Element> Maximum(Element element)`

#### Parameters

`element`

Element

#### Returns

List<Element>

The s resulting from the maximum, wrapped in a list due to inheritance.

**Maximum(Point, Point)**

Computes the maximum of two Points that are defined at the same time.

`public static Point Maximum(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The point resulting from the maximum.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Maximum(Point)**

Computes the maximum of two Points that are defined at the same time.

`public Point Maximum(Point b)`

#### Parameters

`b`

Point

#### Returns

Point

The point resulting from the maximum.

#### Exceptions

ArgumentException

Thrown if the two points do not overlap.

**Maximum(Point, Segment)**

Computes the maximum of a Point to an overlapping Segment.

`public static Point Maximum(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Point

The point resulting from the maximum.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Maximum(Segment)**

Computes the maximum of a Point to an overlapping Segment.

`public Point Maximum(Segment segment)`

#### Parameters

`segment`

Segment

#### Returns

Point

The point resulting from the maximum.

#### Exceptions

ArgumentException

Thrown if point and segment do not overlap.

**Maximum(IReadOnlyList<Point>)**

Computes the maximum of a set of points.

`public static Point Maximum(IReadOnlyList<Point> points)`

#### Parameters

`points`

IReadOnlyList<Point>

Points of which the maximum has to be computed.

#### Returns

Point

The point resulting from the overall maximum.

#### Exceptions

ArgumentException

Thrown if the points do not overlap.

InvalidOperationException

Thrown if the set of points is empty.

**Convolution(Element, Nullable<Rational>, Nullable<Rational>)**

Computes the convolution between the Point and the given Element.

`public IEnumerable<Element> Convolution(Element element, Nullable<Rational> cutEnd, Nullable<Rational> cutCeiling)`

#### Parameters

`element`

Element

`cutEnd`

Nullable<Rational>

`cutCeiling`

Nullable<Rational>

#### Returns

IEnumerable<Element>

The s resulting from the convolution, wrapped in a list due to inheritance.

**Convolution(Point, Point)**

Computes the convolution between two Points.

Defined in [BT08] Section 3.2.1, Lemma 2

`public static Point Convolution(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The resulting from the convolution.

**Convolution(Point)**

Computes the convolution between two Points.

Defined in [BT08] Section 3.2.1, Lemma 2

`public Point Convolution(Point point)`

#### Parameters

`point`

Point

#### Returns

Point

The resulting from the convolution.

**Convolution(Point, Segment)**

Computes the convolution between a Point and a Segment.

Defined in [BT08] Section 3.2.1, Lemma 3

`public static Segment Convolution(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Segment

The resulting from the convolution.

**Convolution(Segment)**

Computes the convolution between the Point and a Segment.

Defined in [BT08] Section 3.2.1, Lemma 3

`public Segment Convolution(Segment segment)`

#### Parameters

`segment`

Segment

#### Returns

Segment

The resulting from the convolution.

**Deconvolution(Element)**

Computes the deconvolution between the Point and the given Element.

`public IEnumerable<Element> Deconvolution(Element element)`

#### Parameters

`element`

Element

#### Returns

IEnumerable<Element>

The s resulting from the deconvolution, wrapped in a list due to inheritance.

**Deconvolution(Point, Point)**

Computes the deconvolution between two Points.

Defined in [BT08] Section 3.2.2, Lemma 5

`public static Point Deconvolution(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The resulting from the deconvolution.

**Deconvolution(Point)**

Computes the deconvolution between two Points.

Defined in [BT08] Section 3.2.2, Lemma 5

`public Point Deconvolution(Point point)`

#### Parameters

`point`

Point

#### Returns

Point

The resulting from the deconvolution.

**Deconvolution(Point, Segment)**

Computes the deconvolution between a Point and a Segment.

Defined in [BT08] Section 3.2.2, Lemma 7

`public static Segment Deconvolution(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Segment

The resulting from the deconvolution.

**Deconvolution(Segment)**

Computes the deconvolution between the Point and a Segment.

Defined in [BT08] Section 3.2.2, Lemma 7

`public Segment Deconvolution(Segment segment)`

#### Parameters

`segment`

Segment

#### Returns

Segment

The resulting from the deconvolution.

**MaxPlusConvolution(Element, Nullable<Rational>)**

Computes the max-plus convolution between the Point and the given Element.

`public IEnumerable<Element> MaxPlusConvolution(Element element, Nullable<Rational> cutEnd)`

#### Parameters

`element`

Element

`cutEnd`

Nullable<Rational>

#### Returns

IEnumerable<Element>

The s resulting from the max-plus convolution, wrapped in a list due to inheritance.

**MaxPlusConvolution(Point, Point)**

Computes the max-plus convolution between two Points.

Adapted from the min-plus convolution algorithm described in [BT08] Section 3.2.1, Lemma 2

`public static Point MaxPlusConvolution(Point a, Point b)`

#### Parameters

`a`

Point

`b`

Point

#### Returns

Point

The resulting from the max-plus convolution.

**MaxPlusConvolution(Point)**

Computes the max-plus convolution between two Points.

Adapted from the min-plus convolution algorithm described in [BT08] Section 3.2.1, Lemma 2

`public Point MaxPlusConvolution(Point point)`

#### Parameters

`point`

Point

#### Returns

Point

The resulting from the max-plus convolution.

**MaxPlusConvolution(Point, Segment)**

Computes the max-plus convolution between a Point and a Segment.

Adapted from the min-plus convolution algorithm described in [BT08] Section 3.2.1, Lemma 3

`public static Segment MaxPlusConvolution(Point point, Segment segment)`

#### Parameters

`point`

Point

`segment`

Segment

#### Returns

Segment

The resulting from the max-plus convolution.

**MaxPlusConvolution(Segment)**

Computes the max-plus convolution between the Point and a Segment.

Adapted from the min-plus convolution algorithm described in [BT08] Section 3.2.1, Lemma 3

`public Segment MaxPlusConvolution(Segment segment)`

#### Parameters

`segment`

Segment

#### Returns

Segment

The resulting from the max-plus convolution.

**SubAdditiveClosure(ComputationSettings)**

Computes the sub-additive closure of the point.

Described in [BT07] Section 4.6 as algorithm 8.

`public SubAdditiveCurve SubAdditiveClosure(ComputationSettings settings)`

#### Parameters

`settings`

ComputationSettings

#### Returns

SubAdditiveCurve

The result of the sub-additive closure.

**SubAdditiveClosure(Rational, Rational, ComputationSettings)**

Computes the sub-additive closure of the pseudo-periodic point.

Described in [BT07] Section 4.6 as algorithm 9

`public SubAdditiveCurve SubAdditiveClosure(Rational pseudoPeriodLength, Rational pseudoPeriodHeight, ComputationSettings settings)`

#### Parameters

`pseudoPeriodLength`

Rational

Lenght of the pseudo-period

`pseudoPeriodHeight`

Rational

Step gained after each pseudo-period

`settings`

ComputationSettings

#### Returns

SubAdditiveCurve

The result of the sub-additive closure

#### Exceptions

ArgumentException

Thrown if the period is not greater than 0