# Affine transformation

In Euclidean geometry, an **affine transformation**, or an **affinity** (from the Latin, *affinis*, "connected with"), is a geometric transformation that preserves lines and parallelism (but not necessarily distances and angles).

More generally, an *affine transformation* is an automorphism of an affine space (Euclidean spaces are specific affine spaces), that is, a function which maps an affine space onto itself while preserving both the dimension of any affine subspaces (meaning that it sends points to points, lines to lines, planes to planes, and so on) and the ratios of the lengths of parallel line segments. Consequently, sets of parallel affine subspaces remain parallel after an affine transformation. An affine transformation does not necessarily preserve angles between lines or distances between points, though it does preserve ratios of distances between points lying on a straight line.

If X is the point set of an affine space, then every affine transformation on X can be represented as the composition of a linear transformation on X and a translation of X. Unlike a purely linear transformation, an affine transformation need not preserve the origin of the affine space. Thus, every linear transformation is affine, but not every affine transformation is linear.

Examples of affine transformations include translation, scaling, homothety, similarity, reflection, rotation, shear mapping, and compositions of them in any combination and sequence.

Viewing an affine space as the complement of a hyperplane at infinity of a projective space, the affine transformations are the projective transformations of that projective space that leave the hyperplane at infinity invariant, restricted to the complement of that hyperplane.

A generalization of an affine transformation is an **affine map**^{[1]} (or **affine homomorphism** or **affine mapping**) between two (potentially different) affine spaces over the same field k. Let (*X*, *V*, *k*) and (*Z*, *W*, *k*) be two affine spaces with X and Z the point sets and V and W the respective associated vector spaces over the field k. A map *f*: *X* → *Z* is an affine map if there exists a linear map *m*_{f} : *V* → *W* such that *m*_{f} (*x* − *y*) = *f* (*x*) − *f* (*y*) for all x, y in X.^{[2]}

Let (*X*, *V*, *k*) be an affine space of dimension at least two, with X the point set and V the associated vector space over the field k. A *semiaffine transformation* f of X is a bijection of X onto itself satisfying:^{[3]}

These two conditions express what is precisely meant by the expression that "f preserves parallelism".

These conditions are not independent as the second follows from the first.^{[4]} Furthermore, if the field k has at least three elements, the first condition can be simplified to: f is a collineation, that is, it maps lines to lines.^{[5]}

If the dimension of the affine space (*X*, *V*, *k*) is at least two, then an **affine transformation** is a semiaffine transformation f that satisfies the condition: If *x* ≠ *y* and *p* ≠ *q* are points of X such that the line segments xy and pq are parallel, then^{[6]}

If the dimension of the affine space is one, that is, the space is an affine line, then any permutation of X would automatically satisfy the conditions to be a semiaffine transform. So, an affine transformation of an affine line is *defined* as any permutation f of the points of X such that if *x* ≠ *y* and *p* ≠ *q* are points of X, then^{[7]}

By the definition of an affine space, V acts on X, so that, for every pair (*x*, * v*) in

*X*×

*V*there is associated a point y in X. We can denote this action by

*v*→(

*x*) =

*y*. Here we use the convention that

*v*→ =

*are two interchangeable notations for an element of V. By fixing a point c in X one can define a function*

**v***m*

_{c}:

*X*→

*V*by

*m*

_{c}(

*x*) =

*cx*→. For any c, this function is one-to-one, and so, has an inverse function

*m*

_{c}

^{−1}:

*V*→

*X*given by

*m*

_{c}

^{−1}(

*) =*

**v***v*→(

*c*). These functions can be used to turn X into a vector space (with respect to the point c) by defining:

^{[8]}

This vector space has origin c and formally needs to be distinguished from the affine space X, but common practice is to denote it by the same symbol and mention that it is a vector space *after* an origin has been specified. This identification permits points to be viewed as vectors and vice versa.

For any linear transformation λ of V, we can define the function *L*(*c*, *λ*) : *X* → *X* by

Then *L*(*c*, *λ*) is an affine transformation of X which leaves the point c fixed.^{[9]} It is a linear transformation of X, viewed as a vector space with origin c.

That is, an arbitrary affine transformation of X is the composition of a linear transformation of X (viewed as a vector space) and a translation of X.

This representation of affine transformations is often taken as the definition of an affine transformation (with the choice of origin being implicit).^{[11]}^{[12]}^{[13]}

The advantage of using homogeneous coordinates is that one can combine any number of affine transformations into one by multiplying the respective matrices. This property is used extensively in computer graphics, computer vision and robotics.

This formulation works irrespective of whether any of the domain, codomain and image vector spaces have the same number of dimensions.

If there is a fixed point, we can take that as the origin, and the affine transformation reduces to a linear transformation. This may make it easier to classify and understand the transformation. For example, describing a transformation as a rotation by a certain angle with respect to a certain axis may give a clearer idea of the overall behavior of the transformation than describing it as a combination of a translation and a rotation. However, this depends on application and context.

The word "affine" as a mathematical term is defined in connection with tangents to curves in Euler's 1748 Introductio in analysin infinitorum.^{[17]} Felix Klein attributes the term "affine transformation" to Möbius and Gauss.^{[12]}

In their applications to digital image processing, the affine transformations are analogous to printing on a sheet of rubber and stretching the sheet's edges parallel to the plane. This transform relocates pixels requiring intensity interpolation to approximate the value of moved pixels, bicubic interpolation is the standard for image transformations in image processing applications. Affine transformations scale, rotate, translate, mirror and shear images as shown in the following examples:^{[18]}

The affine transforms are applicable to the registration process where two or more images are aligned (registered). An example of image registration is the generation of panoramic images that are the product of multiple images stitched together.

The affine transform preserves parallel lines. However, the stretching and shearing transformations warp shapes, as the following example shows:

This is an example of image warping. However, the affine transformations do not facilitate projection onto a curved surface or radial distortions.

To visualise the general affine transformation of the Euclidean plane, take labelled parallelograms *ABCD* and *A′B′C′D′*. Whatever the choices of points, there is an affine transformation *T* of the plane taking *A* to *A′*, and each vertex similarly. Supposing we exclude the degenerate case where *ABCD* has zero area, there is a unique such affine transformation *T*. Drawing out a whole grid of parallelograms based on *ABCD*, the image *T*(*P*) of any point *P* is determined by noting that *T*(*A*) = *A′*, *T* applied to the line segment *AB* is *A′B′*, *T* applied to the line segment *AC* is *A′C′*, and *T* respects scalar multiples of vectors based at *A*. [If *A*, *E*, *F* are collinear then the ratio length(*AF*)/length(*AE*) is equal to length(*A*′*F*′)/length(*A*′*E*′).] Geometrically *T* transforms the grid based on *ABCD* to that based in *A′B′C′D′*.

Affine transformations do not respect lengths or angles; they multiply area by a constant factor

A given *T* may either be *direct* (respect orientation), or *indirect* (reverse orientation), and this may be determined by its effect on *signed* areas (as defined, for example, by the cross product of vectors).

The following equation expresses an affine transformation of GF(2^{8}) viewed as an 8-dimensional vector space over GF(2), that is used in the crypto-algorithm Rijndael (AES):

Transforming the three corner points of the original triangle (in red) gives three new points which form the new triangle (in blue). This transformation skews and translates the original triangle.

In fact, all triangles are related to one another by affine transformations. This is also true for all parallelograms, but not for all quadrilaterals.