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

Copyright | (c) 2013 diagrams-lib team (see LICENSE)
License | BSD-style (see LICENSE)
Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | None
Language | Haskell2010

Diagrams.Angle

Contents

- Angle type
  - Using angles
  - Common angles
  - Trigonometric functions
  - Angle utilities
  - Classes

Description

Type for representing angles.

Synopsis

- data Angle n
- (@@) :: b -> AReview a b -> a
- rad :: Iso' (Angle n) n
- turn :: Floating n => Iso' (Angle n) n
- deg :: Floating n => Iso' (Angle n) n
- fullTurn :: Floating v => Angle v
- halfTurn :: Floating v => Angle v
- quarterTurn :: Floating v => Angle v
- sinA :: Floating n => Angle n -> n
- cosA :: Floating n => Angle n -> n
- tanA :: Floating n => Angle n -> n
- asinA :: Floating n => n -> Angle n
- acosA :: Floating n => n -> Angle n
- atanA :: Floating n => n -> Angle n
- atan2A :: RealFloat n => n -> n -> Angle n
- atan2A' :: OrderedField n => n -> n -> Angle n
- angleBetween :: (Metric v, Floating n) => v n -> v n -> Angle n
- angleRatio :: Floating n => Angle n -> Angle n -> n
- normalizeAngle :: (Floating n, Real n) => Angle n -> Angle n
- class HasTheta t where
  - _theta :: RealFloat n => Lens' (t n) (Angle n)
- class HasTheta t => HasPhi t where
  - _phi :: RealFloat n => Lens' (t n) (Angle n)

# Angle type

data Angle n Source

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

Instances

Functor Angle Source |
Applicative Angle Source |
Additive Angle 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
    3.141592653589793 @@ rad

    >>> 1 @@ turn
    6.283185307179586 @@ rad

    >>> 30 @@ deg
    0.5235987755982988 @@ rad

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.

quarterTurn :: Floating v => Angle v Source

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 |