Rasterific-0.3: A pure haskell drawing engine.

Safe HaskellSafe-Inferred

Graphics.Rasterific.Transformations

Description

This module provide some helpers in order to perform basic geometric transformation on the drawable primitives.

You can combine the transformation is mappend or the `(<>)` operator from Data.Monoid .

Synopsis

Documentation

data Transformation Source

Represent a 3*3 matrix for homogenous coordinates.

 | A C E |
 | B D F |
 | 0 0 1 |

Constructors

Transformation 

Fields

_transformA :: !Float
 
_transformC :: !Float
 
_transformE :: !Float

X translation

_transformB :: !Float
 
_transformD :: !Float
 
_transformF :: !Float

Y translation

applyTransformation :: Transformation -> Point -> PointSource

Effectively transform a point given a transformation.

applyVectorTransformation :: Transformation -> Vector -> VectorSource

Effectively transform a vector given a transformation. The translation part won't be applied.

translate :: Vector -> TransformationSource

Perform a translation of the given primitives.

 fill . transform (applyTransformation $ translate (V2 100 100))
      $ rectangle (V2 40 40) 40 40

scale :: Float -> Float -> TransformationSource

Perform a scaling of the given primitives.

 fill . transform (applyTransformation $ scale 2 2)
      $ rectangle (V2 40 40) 40 40

rotateSource

Arguments

:: Float

Rotation angle in radian.

-> Transformation 

Create a transformation representing a rotation on the plane.

 fill . transform (applyTransformation $ rotate 0.2)
      $ rectangle (V2 40 40) 120 120

rotateCenterSource

Arguments

:: Float

Rotation angle in radian

-> Point

Rotation center

-> Transformation 

Create a transformation representing a rotation on the plane. The rotation center is given in parameter

 fill . transform (applyTransformation $ rotateCenter 0.2 (V2 200 200))
      $ rectangle (V2 40 40) 120 120

skewX :: Float -> TransformationSource

Skew transformation along the X axis.

 fill . transform (applyTransformation $ skewX 0.3)
      $ rectangle (V2 50 50) 80 80

skewY :: Float -> TransformationSource

Skew transformation along the Y axis.

 fill . transform (applyTransformation $ skewY 0.3)
      $ rectangle (V2 50 50) 80 80

inverseTransformation :: Transformation -> Maybe TransformationSource

Inverse a transformation (if possible)