# RangeD

## Description

`struct` `Tinman.Core.Math.RangeD`

A closed interval of numbers (64-bit floating-point): `[Start..End]`

``` +----+----+----+----O----+----+----+----+--->  Number axis
-4   -3   -2   -1    0    1    2    3    4
^                   ^
Start               End
\___________________/
Length := End - Start```

## Public / Constants

### Inv

`public` `static` `readonly` `attribute` `Inv` → `(RangeD)`

The value of Max, with swapped start and end values.

This range can be used as the initial value for finding the minimum/maximum of a series of numbers (see `Grow`).

### Max

`public` `static` `readonly` `attribute` `Max` → `(RangeD)`

A range that contains all 64-bit floating-point values.

### Pos

`public` `static` `readonly` `attribute` `Pos` → `(RangeD)`

A range that contains all positive 64-bit floating-point values.

### Unit

`public` `static` `readonly` `attribute` `Unit` → `(RangeD)`

The unit interval: `[0..1]`.

### Zero

`public` `static` `readonly` `attribute` `Zero` → `(RangeD)`

A range at offset zero with zero length.

## Public / Constructors

### Closed

`[Pure]`
`public` `static` `method` `Closed` → `(2)`

in : float64

Left value of interval.

in : float64

Right value of interval.

returns → RangeD

The range value.

Returns a range that represents the closed interval `[a..b]` (i.e. both `a` and `b` are contained in the range).

### From

`[Pure]`
`public` `static` `method` `From` → `(1)`

in : float64

Ths range start value.

returns → RangeD

The range value.

Returns a range that contains all values greater than or equal to in.

### Of

`[Pure]`
`public` `static` `method` `Of1` → `(1)`

in : float64

The value to contains.

returns → RangeD

The range value.

Returns the shortest possible range that contains the given value.

`[Pure]`
`public` `static` `method` `Of2` → `(2)`

in : float64

First value to contain.

in : float64

Second value to contain.

returns → RangeD

The range value.

Returns the shortest possible range that contains the given values.

`[Pure]`
`public` `static` `method` `Of3` → `(3)`

in : float64

First value to contain.

in : float64

Second value to contain.

in : float64

Third value to contain.

returns → RangeD

The range value.

Returns the shortest possible range that contains the given values.

### To

`[Pure]`
`public` `static` `method` `To` → `(1)`

in : float64

Ths range end value.

returns → RangeD

The range value.

Returns a range that contains all values less than or equal to in.

## Public / Methods

### Clamp

`[Pure]`
`public` `method` `Clamp` → `(1)`

value in : float64

The value to clamp.

returns → float64

The clamped value.

Clamps the given value to this range.

### Contains

`[Pure]`
`public` `method` `Contains1` → `(1)`

value in : float64

The value.

returns → bool

`true` if value in is contained in this range, `false` if not.

Checks if this range contains the given value.

`[Pure]`
`public` `method` `Contains2` → `(1)`

range in : RangeD

The range.

returns → bool

`true` if range in is fully contained in this range, `false` if not.

Checks if this range fully contains the given range.

### Grow

`[Pure]`
`public` `method` `Grow1` → `(1)`

value in : float64

The value.

returns → RangeD

The resulting range.

Grows this range so that it contains the given value.

`[Pure]`
`public` `method` `Grow2` → `(1)`

range in : RangeD

The range.

returns → RangeD

The resulting range.

Grows this range so that it fully contains the given range.

### Intersection

`[Pure]`
`public` `method` `Intersection` → `(1)`

other in : RangeD

The other range.

returns → RangeD

The resulting range.

Intersects this range with the given one.

### Intersects

`[Pure]`
`public` `method` `Intersects` → `(1)`

other in : RangeD

The other range.

returns → bool

`true` if both ranges intersect, `false` if not.

Checks if this range intersects with the given one.

### Scale

`[Pure]`
`public` `method` `Scale` → `(1)`

factor in : float64

`[>0]`
The scale factor.

returns → RangeD

The scaled range.

Scales this range.

### Transform

`[Pure]`
`public` `method` `Transform` → `(2)`

value in : float64

The value to transform.

target in : RangeD

The target range.

returns → float64

The transformed value.

Transforms the given value from this range to the given range.

The method maps Start to target in. RangeF.Start and End to target in. RangeF.End.
No clamping is performed by this method.

## Public / Attributes

### End

`public` `readonly` `attribute` `End` → `(float64)`

End of number range (inclusive).

### IsEmpty

`public` `attribute` `IsEmpty` → `(get)`

value : bool

`true` if this range is empty, `false` if it is not.

Is this number range empty?

### Length

`public` `attribute` `Length` → `(get)`

value : float64

The range length.

Length of this number range.

### Start

`public` `readonly` `attribute` `Start` → `(float64)`

Start of number range (inclusive).

## Serialization

### Serializer

`public` `static` `readonly` `attribute` `Serializer` → `(ITypeSerializer<RangeD>)`

The serialization helper object for values of RangeD.