Libart uses a double array to represent affine transforms. A new point (x', y') is determined from an original point (x, y) according to the following equations:
x' = affinex + affiney + affine
y' = affinex + affiney + affine
Affine transformations cover rotation, translation, scaling, squashing, and skewing, as well as all combinations of the above. Affine transformations have many nice properties, including being closed under composition, invertible, and very easy to use in computations. Many important geometric data structures and operations are invariant under affine transformation, including the representation of Bézier paths.