Given the vertices of 2 triangles, as written below, how do I find a 4x4 homogeneous transformation matrix to describe the transformation from the first triangle to the second?

$$Triangle 1 = T_1 = \{(0,0)(0,1)(1,0)\}$$

$$Triangle 2 = T_2 = \{(1,1)(2,2)(3,1)\}$$

I can do this using 3x3 matrices, but am specifically asked for a 4x4 matrix. For 3x3 (below), I found the inverse of the matrix describing the first triangle in homogeneous coordinate. I multiplied that matrix by the homogeneous, 3x3 matrix of the second triangle, and ended up with a 3x3 transformation matrix. This matrix works, as when multiplied by $T_1$, you get $T_2$. I am assuming a 4x4 can be found by treating the z values as zeroes, but I'm not sure how to proceed. $$ T_2 = R_{trans}*T_1 => R_{trans} = T_2*T_1^{-1}$$ $$T_1 = \begin{bmatrix} 0 & 0 & 1\\ 0 & 1 & 0 \\ 1 & 1 & 1 \\ \end{bmatrix} $$

$$T_1^{-1} = \begin{bmatrix} -1 & -1 & 1\\ 0 & 1 & 0 \\ 1 & 0 & 0 \\ \end{bmatrix} $$ $$T_2*T_1^{-1} = \begin{bmatrix} 2 & 1 & 1\\ 0 & 1 & 1\\ 0 & 0 & 1 \\ \end{bmatrix} = R_{trans}$$

  • $\begingroup$ Since your triangles are express as two dimensional objects, their homogenous transformation is going to be 3-dimensional. To get 4D, just tack on another dimension whose value is always 0 (i.e., $T_1 = \{(0,0,0), (0,1,0), (1,0,0)\}$, etc. The effect on the transformation will be to add another row and colum which are $0$ everywhere except for $1$ on the diagonal. $\endgroup$ – Paul Sinclair Feb 5 '17 at 19:54
  • $\begingroup$ So I would end up with a 4x3 matrix for the triangle vertices? $\endgroup$ – cl40 Feb 6 '17 at 14:28

The most likely reason to want a $4\times4$ matrix for this is because you want to leverage some technology which is geared towards 3d operations. So you can think of your 2d coordinates as embedded into a 3d space which in turn is represented using homogeneous coordinates.

In general an affine 2d operation would have the following matrix representation in projective 3d:

$$\begin{pmatrix}x'\\y'\\0\\1\end{pmatrix}=\begin{pmatrix} *&*&0&*\\ *&*&0&*\\ 0&0&1&0\\ 0&0&0&1 \end{pmatrix}\cdot\begin{pmatrix}x\\y\\0\\1\end{pmatrix}$$

So you essentially insert a row and column into the matrix, namely the third row and column in the above matrix, to indicate that the third coordinate should be left as it is. That way a zero $z$ coordinate on input will become a zero $z$ coordinate on output.

If your transformation is not affine but projective, you can use a more general form where the last row can have arbitrary values except in the thrid column. That's what I used in this post when representing a 2d projective transformation for use in a matrix3d CSS transformation.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.