# Vec2D

## Description

`struct` `Tinman.Core.Math.Vectors.Vec2D`

A two-dimensional vector with 64-bit floating-point precision.

```/     \
|  X  |
|  Y  |
\     /```

## Public / Constants

### Undefined

`public` `static` `readonly` `attribute` `Undefined` → `(Vec2D)`

A vector with undefined value.

### Zero

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

The zero vector.

## Public / Constructors

### Vec2​D

`public` `constructor` `Vec2D` → `(2)`

in : float64

X-coordinate of vector.

in : float64

Y-coordinate of vector.

Creates a new instance of Vec2D.

## Public / Methods

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

in : Vec2D

The vector.

returns → Vec2D

The resulting vector.

Adds this vector and the given one.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → Vec2D

The resulting vector.

Adds this vector and the given one.

### Barycentric

`[Pure]`
`public` `method` `Barycentric` → `(3)`

in : Vec2D

First vertex of triangle.

in : Vec2D

Second vertex of triangle.

in : Vec2D

Third vertex of triangle.

returns → Vec3D

The barycentric coordinates of this vector, where Vec3D.X, Vec3D.Y and Vec3D.Z represent the weights for the triangle vertices in, in and in (in this order). This vector lies inside of the given triangle iff Vec3D.X, Vec3D.Y and Vec3D.Z are non-negative.

Computes the barycentric coordinates of this vector in the given triangle.

### Ceiling

`[Pure]`
`public` `method` `Ceiling` → `()`

returns → Vec2D

The resulting vector.

Computes the component-wise ceiling of this vector.

### Choose

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

idx in : int32

The zero-based component index.

opt : float64 = 0

The value to return if idx in is out of range.

returns → float64

The resulting vector.

Chooses a component of this vector.

### Cross

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

in : float64

Z-component of vector (X- and Y-components are zero).

returns → Vec2D

The cross product vector.

Computes the cross product between this vector and the given one: `this x other`.

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

in : Vec2D

The other vector.

returns → float64

The Z-component of the cross product vector (X- and Y-components are zero).

Computes the cross product between this vector and the given one: `this x other`.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → float64

The Z-component of the cross product vector (X- and Y-components are zero).

Computes the cross product between this vector and the given one: `this x other`.

### Div

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

in : float64

The scalar value.

returns → Vec2D

The resulting vector.

Divides this vector by the given scalar value.

### Dot

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

in : Vec2D

The vector.

returns → float64

The resulting vector.

Computes the dot product between this vector and the given one.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → float64

The resulting vector.

Computes the dot product between this vector and the given one.

### Equals

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → bool

`true` if both vectors are equal, `false` if they are not.

Checks if this vector and the given one are equal.

### Equals​Almost

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

in : Vec2D

The vector.

returns → bool

`true` if both vectors are similar, `false` if they are not.

Checks if this vector and the given one are similar but necessarily equal.

Maths.Similar2

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → bool

`true` if both vectors are similar, `false` if they are not.

Checks if this vector and the given one are similar but necessarily equal.

Maths.Similar2

### Floor

`[Pure]`
`public` `method` `Floor` → `()`

returns → Vec2D

The resulting vector.

Computes the component-wise floor of this vector.

### Max

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

in : Vec2D

The vector.

returns → Vec2D

The resulting vector.

Computes the component-wise maximum of this vector and the given one.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → Vec2D

The resulting vector.

Computes the component-wise maximum of this vector and the given one.

### Min

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

in : Vec2D

The vector.

returns → Vec2D

The resulting vector.

Computes the component-wise minimum of this vector and the given one.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → Vec2D

The resulting vector.

Computes the component-wise minimum of this vector and the given one.

### Mul

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

in : Vec2D

The vector.

returns → Vec2D

The resulting vector.

Multiplies this vector with the given one.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → Vec2D

The resulting vector.

Multiplies this vector with the given one.

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

in : float64

The scalar value.

returns → Vec2D

The resulting vector.

Multiplies this vector with the given scalar value.

### Neg

`[Pure]`
`public` `method` `Neg` → `()`

returns → Vec2D

The resulting vector.

Negates this vector.

### Norm

`[Pure]`
`public` `method` `Norm` → `()`

returns → Vec2D

The resulting vector.

Normalizes this vector to unit length.

### Sub

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

in : Vec2D

The vector.

returns → Vec2D

The resulting vector.

Subtracts the given vector from this one.

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

in : float64

X-component of vector.

in : float64

Y-component of vector.

returns → Vec2D

The resulting vector.

Subtracts the given vector from this one.

### To​String

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

flags in : FormatFlags

The format flags to use.

returns → string

The string representation.

Returns the string representation of this vector.

Format.ThisNum

## Public / Attributes

### Is​Undefined

`public` `attribute` `IsUndefined` → `(get)`

value : bool

`true` if this vector has an undefined value, `false` if not.

Checks if this vector has an undefined value.

A vector is undefined if at least one component is NaN (not-a-number).

### Length

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

value : float64

`[>=0]`
The vector length.

Returns the length of this vector.

### Length​Sqr

`public` `attribute` `LengthSqr` → `(get)`

value : float64

`[>=0]`
The squared vector length.

Returns the squared length of this vector.

### X

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

X-coordinate of vector.

### Y

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

Y-coordinate of vector.

## Serialization

### Serializer

`public` `static` `readonly` `attribute` `Serializer` → `(ITypeSerializerEx<Vec2D>)`

The serialization helper object for values of Vec2D.