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

Safe Haskell | None
Language | Haskell2010

Diagrams.Deform

Synopsis

- newtype Deformation v u n = Deformation (Point v n -> Point u n)
- class Deformable a b where
  - deform' :: N a -> Deformation (V a) (V b) (N a) -> a -> b
  - deform :: Deformation (V a) (V b) (N a) -> a -> b
- asDeformation :: (Additive v, Num n) => Transformation v n -> Deformation v v n

# Documentation

newtype Deformation v u n Source #

`Deformations` are a superset of the affine transformations represented by the `Transformation` type. In general they are not invertible. `Deformation`s include projective transformations. `Deformation` can represent other functions from points to points which are "well-behaved", in that they do not introduce small wiggles.

Constructors

Deformation (Point v n -> Point u n) |

#### Instances

Instances details

Semigroup (Deformation v v n) Source # |
Instance details Defined in Diagrams.Deform Methods (<>) :: Deformation v v n -> Deformation v v n -> Deformation v v n sconcat :: NonEmpty (Deformation v v n) -> Deformation v v n stimes :: Integral b => b -> Deformation v v n -> Deformation v v n
Monoid (Deformation v v n) Source # |
Instance details Defined in Diagrams.Deform Methods mempty :: Deformation v v n mappend :: Deformation v v n -> Deformation v v n -> Deformation v v n # mconcat :: [Deformation v v n] -> Deformation v v n

class Deformable a b where Source #

Methods

deform' :: N a -> Deformation (V a) (V b) (N a) -> a -> b Source #

`deform' epsilon d a` transforms `a` by the deformation `d`. If the type of `a` is not closed under projection, approximate to accuracy `epsilon`.

deform :: Deformation (V a) (V b) (N a) -> a -> b Source #

`deform d a` transforms `a` by the deformation `d`. If the type of `a` is not closed under projection, `deform` should call `deform'` with some reasonable default value of `epsilon`.

#### Instances

Instances details

(Metric v, Metric u, OrderedField n, r ~ Located (Trail u n)) => Deformable (Located (Trail v n)) r Source # |
Instance details Defined in Diagrams.Deform Methods deform' :: N (Located (Trail v n)) -> Deformation (V (Located (Trail v n))) (V r) (N (Located (Trail v n))) -> Located (Trail v n) -> r Source # deform :: Deformation (V (Located (Trail v n))) (V r) (N (Located (Trail v n))) -> Located (Trail v n) -> r Source #
r ~ Point u n => Deformable (Point v n) r Source # |
Instance details Defined in Diagrams.Deform Methods deform' :: N (Point v n) -> Deformation (V (Point v n)) (V r) (N (Point v n)) -> Point v n -> r Source # deform :: Deformation (V (Point v n)) (V r) (N (Point v n)) -> Point v n -> r Source #
(Metric v, Metric u, OrderedField n, r ~ Path u n) => Deformable (Path v n) r Source # |
Instance details Defined in Diagrams.Deform Methods deform' :: N (Path v n) -> Deformation (V (Path v n)) (V r) (N (Path v n)) -> Path v n -> r Source # deform :: Deformation (V (Path v n)) (V r) (N (Path v n)) -> Path v n -> r Source #

asDeformation :: (Additive v, Num n) => Transformation v n -> Deformation v v n Source #

`asDeformation` converts a `Transformation` to a `Deformation` by discarding the inverse transform. This allows reusing `Transformation`s in the construction of `Deformation`s.