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




Some convenient functions related to transformations.



conjugate :: HasLinearMap v => Transformation v -> Transformation v -> Transformation vSource

Conjugate one transformation by another. conjugate t1 t2 is the transformation which performs first t1, then t2, then the inverse of t1.

under :: Transformable a => (a -> a) -> Transformation (V a) -> a -> aSource

Carry out some transformation "under" another one: f `under` t first applies t, then f, then the inverse of t. For example, rotateBy (1/3) `under` translationX 1 is equivalent to a rotation by 120 degrees about the point (-1,0) (you may have to think about this for a minute =).

Note that

 (transform t2) `under` t1 == transform (conjugate t1 t2)

for all transformations t1 and t2.