3
$\begingroup$

A book on CG says:

... we can construct any affine transformation from a sequence of rotations, translations, and scalings.

But I don't know how to prove it.

Even in a particular case, I found it still hard. For example, how to construct a shear transformation from a sequence of rotations, translations, and scalings?

Can you please help? Thank you.

EDIT:

Axis scalings may use different scaling factors for the axes.

Is there a matrix representation or proof for this?

For example, to show that a two-dimensional rotation can be decomposed into three shear transformation, we can write $ \begin{pmatrix} \cos\alpha & \sin\alpha\\ -\sin\alpha & \cos\alpha \end{pmatrix} = \begin{pmatrix} 1 & \tan\frac{\alpha}{2}\\ 0 & 1 \end{pmatrix} \begin{pmatrix} 1 & 0\\ -\sin\alpha & 1 \end{pmatrix} \begin{pmatrix} 1 & \tan\frac{\alpha}{2}\\ 0 & 1 \end{pmatrix} $

  • 0
    @Chris: Thank you for your example. I want to know that is there a matrix representation or proof for this in general situation?2011-05-27

2 Answers 2

2

You can write any affine transformation

\vec{x}'=A\vec{x}+\vec{t}\;,

where $A$ is any non-singular matrix, as follows:

\left( \begin{array}{c} \vec{x}'\\ 1 \end{array} \right) = \left( \begin{array}{cc} A&\vec{t}\\ 0&1 \end{array} \right) \left( \begin{array}{c} \vec{x}\\ 1 \end{array} \right) \;.

This allows you to compose affine transformations by composing the corresponding matrices. In this approach, rotations, translations and axis scalings can respectively be written like this:

$ \left( \begin{array}{cc} \Omega&0\\ 0&1 \end{array} \right) \;, $

$ \left( \begin{array}{cc} I&\vec{t}\\ 0&1 \end{array} \right) \;, $

$ \left( \begin{array}{cc} S&0\\ 0&1 \end{array} \right) \;, $

where $\Omega$ is a rotation matrix, $I$ is the identity matrix and $S$ is a diagonal matrix with the scaling factors on the diagonal.

Given any affine transformation specified by $A$ and $\vec{t}$, you can split it into a translation and a linear part:

$ \left( \begin{array}{cc} A&\vec{t}\\ 0&1 \end{array} \right) = \left( \begin{array}{cc} I&\vec{t}\\ 0&1 \end{array} \right) \left( \begin{array}{cc} A&0\\ 0&1 \end{array} \right) \;. $

So now we just need to be able to write any non-singular matrix as a product of rotations and axis scalings. This is possible due to the singular value decomposition.

  • 0
    Thank you very much! I've got it.2011-05-27
2

Perhaps using the singular value decomposition?

For the homogeneus case (linear transformation), we can always write

$y = A x = U D V^t x$

for any square matrix $A$ with positive determinant, were U and V are orthogonal and D is diagonal with positive real entries. U and V would the be the rotations and D the scaling.

Some (trivial?) details to polish: what if A has negative determinant, what is U and V are not pure rotations but also involve axis reflections.

It only remains add the indepent term to get the affine transformation ($y = Ax +b$) and that would be the translation.

  • 0
    Thank you all the same. You've told me some detailed points.2011-05-27