9
$\begingroup$

I have a $2\times 3$ affine matrix $$ M = \pmatrix{a &b &c\\ d &e &f} $$ which transforms a point $(x,y)$ into $x' = a x + by + c, y' = d x + e y + f$

Is there a way to decompose such matrix into shear, rotation, translation,and scale ? I know there's something for $4\times 4$ matrixes, but for a $2\times 3$ matrix ?

  • 1
    You can use the natural embedding of your 2x3 matrices in 4x4 matrices and apply the algorithms you know.2011-11-02
  • 0
    What's "natural embedding" ? Sorry if it's something trivial, but I'm not a mathematician. I was also thinking that ideally the affine transform should be something like M = A * p + T, where T is the translation vector simply given by c and f. So maybe I should "simply" decompose A (a 2x2 matrix) ?2011-11-02
  • 0
    @tagomago the natorual embedding is given by using homogeneous coordinates as used in the answer. That is a nice trick to transform linear functions in n dimensions to affine functions in n+1 dimensions.2015-05-18

2 Answers 2

14

You've written this somewhat unorthodoxly. To use that matrix for that transformation, one would more usually write

$$\pmatrix{x'\\y'\\1}=\pmatrix{a&b&c\\d&e&f\\0&0&1}\pmatrix{x\\y\\1}\;.$$

So the difference between a $2\times3$ matrix and a $4\times4$ matrix was only from your way of writing it; this works the same way as an affine transform in three dimensions, just with one fewer dimension. You can immediately factor out the translation,

$$\pmatrix{x'\\y'\\1}=\pmatrix{1&0&c\\0&1&f\\0&0&1}\pmatrix{a&b&0\\d&e&0\\0&0&1}\pmatrix{x\\y\\1}\;.$$

Then you just have to decompose $\pmatrix{a&b\\d&e}$ into shear, rotation and scaling in two dimensions.

[Edit in response to the comment:]

This isn't a unique decomposition, since you can do the shear, rotation and scaling in any order. Here's the decomposition I use:

$$A=\pmatrix{a&b\\d&e}=\pmatrix{p\\&r}\pmatrix{1\\q&1}\pmatrix{\cos\phi&\sin\phi\\-\sin\phi&\cos\phi}$$

with

$$ \begin{eqnarray} p&=&\sqrt{a^2+b^2}\;,\\ r&=&\frac{\det A}p=\frac{ae-bd}{\sqrt{a^2+b^2}}\;,\\ q&=&\frac{ad+be}{\det A}=\frac{ad+be}{ae-bd}\;,\\ \phi&=&\operatorname{atan}(b,a)\;, \end{eqnarray} $$

where $\operatorname{atan}$ is the two-argument arctangent function with operand order as in Java. This of course assumes $p\ne0$.

  • 0
    Thanks to both for the complete decomposition2011-11-02
  • 0
    The matrix $A$ needs to be invertible. That means that $det A \neq 0$ and $p \neq 0$. If $p = 0$ we had $a = 0$ and $b=0$ and therefore A not invertible.2015-04-25
  • 0
    Can you give/suggest a reference for this tecqnique?2015-10-07
  • 0
    @acs: I can't, unfortunately. I seem to remember that there's something about this in either the PostScript or PDF reference manual, but I might be wrong.2015-10-07
  • 0
    @acs: There are a whole lot of equations in that article. Which equations are you interested in, and which equations should they be compatible with, in what sense?2016-02-07
  • 0
    @acs: I don't see a well-defined question there. If you tell me specifically which equation in the article you're comparing with which equation in my answer, and why you'd expect them to be compatible or not, and what it would mean for them to be compatible, I'll be happy to answer.2016-02-07
  • 0
    Ok. I withdraw my comments. Please can you specify the names of the variables. Which is translation, which is rotation etc.2016-02-07
  • 0
    @acs: $e$ and $f$ are translation, $p$ and $r$ are scaling, $q$ is shear and $\phi$ is rotation.2016-02-09
  • 0
    @joriki that should be $c$ and $f$ for translation.2016-10-21
  • 0
    @DrewCummins: True, thanks.2018-06-25
9

If $(x, y, 1)$ is a vector in homogeneous coordinates, we have, by decomposing $M$ into blocks, that

$$M \left[\begin{array}{c}x\\y\\1\end{array}\right] = \left[\begin{array}{cc} a& b\\ d&e\end{array}\right]\left[\begin{array}{c}x\\y\end{array}\right] + \left[\begin{array}{c}c\\f\end{array}\right].$$

Here $(c,f)$ is the translation component. We can decompose the 2x2 matrix into a composition of a rotation, shear, and scale by using the QR decomposition:

$$\begin{align*}\left[\begin{array}{cc}a & b\\d & e\end{array}\right] &= \left[\begin{array}{cc} \cos \theta &-\sin \theta \\ \sin\theta &\cos \theta\end{array}\right]\left[\begin{array}{cc} \sqrt{a^2+d^2} & b\cos \theta + e\sin \theta\\0 & e\cos \theta - b\sin \theta\end{array}\right]\\ &=\left[\begin{array}{cc} \cos \theta &-\sin \theta \\ \sin\theta &\cos \theta\end{array}\right]\left[\begin{array}{cc}1 & \frac{b\cos \theta + e\sin\theta}{e\cos \theta-b\sin\theta}\\0 & 1\end{array}\right]\left[\begin{array}{cc}\sqrt{a^2+d^2} & 0\\0 & e\cos\theta - b\sin\theta\end{array}\right],\end{align*}$$ where $\theta = \arctan\left(\frac{d}{a}\right).$

  • 2
    Can you explain why and how the decompostion ends up in a rotation, shear and scale matrix? I recognise the rotation matrix but am not familiar with the others and also dont see why QR decomposition does this. And would this easily be extendable to more than 2 dimensions?2015-01-26