diagrams-lib-1.3.0.8: Embedded domain-specific language for declarative graphics

Diagrams.Angle

Description

Type for representing angles.

Synopsis

# Angle type

data Angle n Source

Angles can be expressed in a variety of units. Internally, they are represented in radians.

Instances

 Source Source Source Enum n => Enum (Angle n) Source Eq n => Eq (Angle n) Source Ord n => Ord (Angle n) Source Read n => Read (Angle n) Source Show n => Show (Angle n) Source Num n => Semigroup (Angle n) Source Num n => Monoid (Angle n) Source type N (Angle n) = n Source

## Using angles

(@@) :: b -> AReview a b -> a infixl 5 Source

`30 @@ deg` is an `Angle` of the given measure and units.

````>>> ````pi @@ rad
```
````>>> ````1 @@ turn
```
````>>> ````30 @@ deg
```

For `Iso'`s, (`@@`) reverses the `Iso'` on its right, and applies the `Iso'` to the value on the left. `Angle`s are the motivating example where this order improves readability.

This is the same as a flipped `review`.

```(`@@`) :: a -> `Iso'`      s a -> s
(`@@`) :: a -> `Prism'`    s a -> s
(`@@`) :: a -> `Review`    s a -> s
(`@@`) :: a -> `Equality'` s a -> s
```

rad :: Iso' (Angle n) n Source

The radian measure of an `Angle` `a` can be accessed as ```a ^. rad```. A new `Angle` can be defined in radians as ```pi @@ rad```.

turn :: Floating n => Iso' (Angle n) n Source

The measure of an `Angle` `a` in full circles can be accessed as `a ^. turn`. A new `Angle` of one-half circle can be defined in as `1/2 @@ turn`.

deg :: Floating n => Iso' (Angle n) n Source

The degree measure of an `Angle` `a` can be accessed as ```a ^. deg```. A new `Angle` can be defined in degrees as ```180 @@ deg```.

## Common angles

fullTurn :: Floating v => Angle v Source

An angle representing one full turn.

halfTurn :: Floating v => Angle v Source

An angle representing a half turn.

An angle representing a quarter turn.

## Trigonometric functions

sinA :: Floating n => Angle n -> n Source

The sine of the given `Angle`.

cosA :: Floating n => Angle n -> n Source

The cosine of the given `Angle`.

tanA :: Floating n => Angle n -> n Source

The tangent function of the given `Angle`.

asinA :: Floating n => n -> Angle n Source

The `Angle` with the given sine.

acosA :: Floating n => n -> Angle n Source

The `Angle` with the given cosine.

atanA :: Floating n => n -> Angle n Source

The `Angle` with the given tangent.

atan2A :: RealFloat n => n -> n -> Angle n Source

`atan2A y x` is the angle between the positive x-axis and the vector given by the coordinates (x, y). The `Angle` returned is in the [-pi,pi] range.

atan2A' :: OrderedField n => n -> n -> Angle n Source

Similar to `atan2A` but without the `RealFloat` constraint. This means it doesn't handle negative zero cases. However, for most geometric purposes, the outcome will be the same.

## Angle utilities

angleBetween :: (Metric v, Floating n) => v n -> v n -> Angle n Source

Compute the positive angle between the two vectors in their common plane. Returns NaN if either of the vectors are zero.

angleRatio :: Floating n => Angle n -> Angle n -> n Source

Calculate ratio between two angles.

normalizeAngle :: (Floating n, Real n) => Angle n -> Angle n Source

Normalize an angle so that it lies in the [0,tau) range.

## Classes

class HasTheta t where Source

The class of types with at least one angle coordinate, called `_theta`.

Minimal complete definition

Nothing

Methods

_theta :: RealFloat n => Lens' (t n) (Angle n) Source

Instances

 HasTheta v => HasTheta (Point v) Source HasTheta v => HasTheta (Direction v) Source

class HasTheta t => HasPhi t where Source

The class of types with at least two angle coordinates, the second called `_phi`. `_phi` is the positive angle measured from the z axis.

Minimal complete definition

Nothing

Methods

_phi :: RealFloat n => Lens' (t n) (Angle n) Source

Instances

 HasPhi v => HasPhi (Point v) Source HasPhi v => HasPhi (Direction v) Source