With the trafo module PyX supports linear transformations, which can then be applied to canvases, Bézier paths and other objects. It consists of the main class trafo representing a general linear transformation and subclasses thereof, which provide special operations like translation, rotation, scaling, and mirroring.
The trafo class represents a general linear transformation, which is defined for a vector \vec{x} as
XXX: translate this math
\vec{x}' = \mathsf{A}\, \vec{x} + \vec{b}\ ,
where \mathsf{A} is the transformation matrix and \vec{b} the translation vector. The transformation matrix must not be singular, i.e. we require \det \mathsf{A} \ne 0.
Multiple trafo instances can be multiplied, corresponding to a consecutive application of the respective transformation. Note that trafo1*trafo2 means that trafo1 is applied after trafo2, i.e. the new transformation is given by \mathsf{A} = \mathsf{A}_1 \mathsf{A}_2 and \vec{b} = \mathsf{A}_1 \vec{b}_2 + \vec{b}_1. Use the trafo methods described below, if you prefer thinking the other way round. The inverse of a transformation can be obtained via the trafo method inverse(), defined by the inverse \mathsf{A}^{-1} of the transformation matrix and the translation vector -\mathsf{A}^{-1}\vec{b}.
The methods of the trafo class are summarized in the following table.
trafo method | function |
---|---|
__init__(matrix=((1,0),(0,1)), vector=(0,0)): | create new trafo instance with transformation matrix and vector. |
apply(x, y) | apply trafo to point vector (\mathtt{x}, \mathtt{y}). |
inverse() | returns inverse transformation of trafo. |
mirrored(angle) | returns trafo followed by mirroring at line through (0,0) with direction angle in degrees. |
rotated(angle, x=None, y=None) | returns trafo followed by rotation by angle degrees around point (\mathtt{x}, \mathtt{y}), or (0,0), if not given. |
scaled(sx, sy=None, x=None, y=None) | returns trafo followed by scaling with scaling factor sx in x-direction, sy in y-direction (\mathtt{sy}=\mathtt{sx}, if not given) with scaling center (\mathtt{x}, \mathtt{y}), or (0,0), if not given. |
translated(x, y) | returns trafo followed by translation by vector (\mathtt{x}, \mathtt{y}). |
slanted(a, angle=0, x=None, y=None) | returns trafo followed by XXX |
The trafo module provides a number of subclasses of the trafo class, each of which corresponds to one trafo method. They are listed in the following table:
trafo subclass | function |
---|---|
mirror(angle) | mirroring at line through (0,0) with direction angle in degrees. |
rotate(angle, x=None, y=None) | rotation by angle degrees around point (\mathtt{x}, \mathtt{y}), or (0,0), if not given. |
scale(sx, sy=None, x=None, y=None) | scaling with scaling factor sx in x-direction, sy in y-direction (\mathtt{sy}=\mathtt{sx}, if not given) with scaling center (\mathtt{x}, \mathtt{y}), or (0,0), if not given. |
translate(x, y) | translation by vector (\mathtt{x}, \mathtt{y}). |
slant(a, angle=0, x=None, y=None) | XXX |