Copyright | (c) 2011-15 diagrams-lib team (see LICENSE) |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | diagrams-discuss@googlegroups.com |
Safe Haskell | None |
Language | Haskell2010 |
Diagrams.Transform
Contents
Description
Affine transformations, parameterized by any vector space. For transformations on particular vector spaces, see e.g. Diagrams.TwoD.Transform.
Synopsis
- data Transformation (v :: Type -> Type) n
- inv :: (Functor v, Num n) => Transformation v n -> Transformation v n
- transl :: Transformation v n -> v n
- apply :: Transformation v n -> v n -> v n
- papply :: (Additive v, Num n) => Transformation v n -> Point v n -> Point v n
- class Transformable t where
- transform :: Transformation (V t) (N t) -> t -> t
- translation :: v n -> Transformation v n
- translate :: Transformable t => Vn t -> t -> t
- moveTo :: (InSpace v n t, HasOrigin t) => Point v n -> t -> t
- place :: (InSpace v n t, HasOrigin t) => t -> Point v n -> t
- scaling :: (Additive v, Fractional n) => n -> Transformation v n
- scale :: (InSpace v n a, Eq n, Fractional n, Transformable a) => n -> a -> a
- conjugate :: (Additive v, Num n) => Transformation v n -> Transformation v n -> Transformation v n
- underT :: (InSpace v n a, SameSpace a b, Transformable a, Transformable b) => (a -> b) -> Transformation v n -> a -> b
- transformed :: (InSpace v n a, SameSpace a b, Transformable a, Transformable b) => Transformation v n -> Iso a b a b
- translated :: (InSpace v n a, SameSpace a b, Transformable a, Transformable b) => v n -> Iso a b a b
- movedTo :: (InSpace v n a, SameSpace a b, HasOrigin a, HasOrigin b) => Point v n -> Iso a b a b
- movedFrom :: (InSpace v n a, SameSpace a b, HasOrigin a, HasOrigin b) => Point v n -> Iso a b a b
- class HasOrigin t where
- moveOriginTo :: Point (V t) (N t) -> t -> t
- moveOriginBy :: (V t ~ v, N t ~ n, HasOrigin t) => v n -> t -> t
Transformations
data Transformation (v :: Type -> Type) n #
Instances
inv :: (Functor v, Num n) => Transformation v n -> Transformation v n #
transl :: Transformation v n -> v n #
apply :: Transformation v n -> v n -> v n #
The Transformable class
class Transformable t where #
Methods
transform :: Transformation (V t) (N t) -> t -> t #
Instances
Some specific transformations
translation :: v n -> Transformation v n #
translate :: Transformable t => Vn t -> t -> t #
scaling :: (Additive v, Fractional n) => n -> Transformation v n #
scale :: (InSpace v n a, Eq n, Fractional n, Transformable a) => n -> a -> a #
Miscellaneous transformation-related utilities
conjugate :: (Additive v, Num n) => Transformation v n -> Transformation v n -> Transformation v n Source #
Conjugate one transformation by another. conjugate t1 t2
is the
transformation which performs first t1
, then t2
, then the
inverse of t1
.
underT :: (InSpace v n a, SameSpace a b, Transformable a, Transformable b) => (a -> b) -> Transformation v n -> a -> b Source #
Carry out some transformation "under" another one: f `
first applies underT
`
tt
, then f
, then the inverse of t
. For
example,
is the transformation which scales by a factor of 2 along the
diagonal line y = x.scaleX
2 `underT
` rotation
(-1/8 @@ Turn)
Note that
(transform t2) underT
t1 == transform (conjugate t1 t2)
for all transformations t1
and t2
.
See also the isomorphisms like transformed
, movedTo
,
movedFrom
, and translated
.
transformed :: (InSpace v n a, SameSpace a b, Transformable a, Transformable b) => Transformation v n -> Iso a b a b Source #
Use a Transformation
to make an Iso
between an object
transformed and untransformed. This is useful for carrying out
functions under
another transform:
under (transformed t) f == transform (inv t) . f . transform t under (transformed t1) (transform t2) == transform (conjugate t1 t2) transformed t ## a == transform t a a ^. transformed t == transform (inv t) a
translated :: (InSpace v n a, SameSpace a b, Transformable a, Transformable b) => v n -> Iso a b a b Source #
Use a vector to make an Iso
between an object translated and
untranslated.
under (translated v) f == translate (-v) . f . translate v translated v ## a == translate v a a ^. translated v == translate (-v) a over (translated v) f == translate v . f . translate (-v)
movedTo :: (InSpace v n a, SameSpace a b, HasOrigin a, HasOrigin b) => Point v n -> Iso a b a b Source #
movedFrom :: (InSpace v n a, SameSpace a b, HasOrigin a, HasOrigin b) => Point v n -> Iso a b a b Source #
Use a Transformation
to make an Iso
between an object
transformed and untransformed. We have
under (movedFrom p) f == moveTo p . f . moveTo (-p) movedFrom p == from (movedTo p) movedFrom p ## a == moveOriginTo p a a ^. movedFrom p == moveTo p a over (movedFrom p) f == moveTo (-p) . f . moveTo p
The HasOrigin class
Methods
moveOriginTo :: Point (V t) (N t) -> t -> t #
Instances
HasOrigin t => HasOrigin [t] | |
Defined in Diagrams.Core.HasOrigin Methods moveOriginTo :: Point (V [t]) (N [t]) -> [t] -> [t] # | |
HasOrigin a => HasOrigin (Active a) Source # | |
Defined in Diagrams.Animation.Active | |
(HasOrigin t, Ord t) => HasOrigin (Set t) | |
Defined in Diagrams.Core.HasOrigin | |
HasOrigin (TransInv t) | |
Defined in Diagrams.Core.Transform Methods moveOriginTo :: Point (V (TransInv t)) (N (TransInv t)) -> TransInv t -> TransInv t # | |
(V t ~ v, N t ~ n, Additive v, Num n, HasOrigin t) => HasOrigin (ScaleInv t) Source # | |
Defined in Diagrams.Transform.ScaleInv | |
(Num (N a), Additive (V a)) => HasOrigin (Located a) Source # |
|
Defined in Diagrams.Located | |
Floating n => HasOrigin (Text n) Source # | |
Defined in Diagrams.TwoD.Text | |
(HasOrigin t, HasOrigin s, SameSpace s t) => HasOrigin (s, t) | |
Defined in Diagrams.Core.HasOrigin Methods moveOriginTo :: Point (V (s, t)) (N (s, t)) -> (s, t) -> (s, t) # | |
HasOrigin t => HasOrigin (Map k t) | |
Defined in Diagrams.Core.HasOrigin | |
(Additive v, Num n) => HasOrigin (Point v n) | |
Defined in Diagrams.Core.HasOrigin | |
(Metric v, Fractional n) => HasOrigin (Envelope v n) | |
Defined in Diagrams.Core.Envelope | |
HasOrigin t => HasOrigin (Measured n t) | |
Defined in Diagrams.Core.HasOrigin Methods moveOriginTo :: Point (V (Measured n t)) (N (Measured n t)) -> Measured n t -> Measured n t # | |
(Additive v, Num n) => HasOrigin (Trace v n) | |
Defined in Diagrams.Core.Trace | |
(Additive v, Num n) => HasOrigin (Transformation v n) | |
Defined in Diagrams.Core.Transform Methods moveOriginTo :: Point (V (Transformation v n)) (N (Transformation v n)) -> Transformation v n -> Transformation v n # | |
(Additive v, Num n) => HasOrigin (FixedSegment v n) Source # | |
Defined in Diagrams.Segment Methods moveOriginTo :: Point (V (FixedSegment v n)) (N (FixedSegment v n)) -> FixedSegment v n -> FixedSegment v n # | |
(Additive v, Num n) => HasOrigin (Path v n) Source # | |
Defined in Diagrams.Path | |
Fractional n => HasOrigin (DImage n a) Source # | |
Defined in Diagrams.TwoD.Image | |
(Additive v, Num n) => HasOrigin (BoundingBox v n) Source # | |
Defined in Diagrams.BoundingBox Methods moveOriginTo :: Point (V (BoundingBox v n)) (N (BoundingBox v n)) -> BoundingBox v n -> BoundingBox v n # | |
(Additive v, Num n) => HasOrigin (Query v n m) | |
Defined in Diagrams.Core.Query | |
(Metric v, OrderedField n, Semigroup m) => HasOrigin (QDiagram b v n m) | |
Defined in Diagrams.Core.Types Methods moveOriginTo :: Point (V (QDiagram b v n m)) (N (QDiagram b v n m)) -> QDiagram b v n m -> QDiagram b v n m # | |
(OrderedField n, Metric v) => HasOrigin (SubMap b v n m) | |
Defined in Diagrams.Core.Types | |
(Metric v, OrderedField n) => HasOrigin (Subdiagram b v n m) | |
Defined in Diagrams.Core.Types Methods moveOriginTo :: Point (V (Subdiagram b v n m)) (N (Subdiagram b v n m)) -> Subdiagram b v n m -> Subdiagram b v n m # |
moveOriginBy :: (V t ~ v, N t ~ n, HasOrigin t) => v n -> t -> t #