Directions are vectors where you have forgot about the length. They are used
much in the same way as normalised vectors (vectors with a magnitude of 1),
but since vectors cannot be normalized while maintaining exactness it is
preferable to simply have a data type where you ignore the magnitude. The
direction can be flipped by taking the negative. 2 dimensional directions can
be considered as angles and can thus be sorted and compared. The same is not
true for directions in 3 dimensions.

```
direction(..., default_dim = 2)
is_direction(x)
between(x, d1, d2)
as_direction(x)
```

## Arguments

- ...
Various input. See the Constructor section.

- default_dim
The dimensionality when constructing an empty vector

- x
A direction vector or an object to convert to it

- d1, d2
direction vectors to relate to

## Value

a `euclid_direction`

vector

## Constructors

**2 and 3 dimensional directions**

Providing 2 or 3 numerics will create directions with the given delta
values. (2 numerics will give 2 dimensional directions, 3 will give 3
dimensional directions).

Providing vectors will construct directions as the direction of the given
vectors.

Providing lines will construct directions as the direction of the given
lines.

Providing rays will construct directions as the direction of the given
rays.

Providing segments will construct directions as the direction of the given
segments.

## See also

Other Geometries:
`circle()`

,
`iso_cube()`

,
`iso_rect()`

,
`line()`

,
`plane()`

,
`point()`

,
`ray()`

,
`segment()`

,
`sphere()`

,
`tetrahedron()`

,
`triangle()`

,
`vec()`

,
`weighted_point()`

Other Arrows:
`vec()`

## Examples

```
# Constructions
d <- direction(sample(10, 3), sample(10, 3))
d
#> <2D directions [3]>
#> [1] <dx:2, dy:9> <dx:7, dy:2> <dx:1, dy:8>
plot(d, col = c("firebrick", "goldenrod", "steelblue"))
# flipping the direction
-d
#> <2D directions [3]>
#> [1] <dx:-2, dy:-9> <dx:-7, dy:-2> <dx:-1, dy:-8>
# Relations
d[1] < d[2]
#> [1] FALSE
min(d)
#> <2D directions [1]>
#> [1] <dx:7, dy:2>
sort(d)
#> <2D directions [3]>
#> [1] <dx:7, dy:2> <dx:2, dy:9> <dx:1, dy:8>
between(d[1], d[2], d[3])
#> [1] TRUE
```