2
$\begingroup$

I am not a matrix geek or something. I just remeber a couple of things from the university math classes. Maybe the explanation is simple.

What's going on: I go through a code of a certain game and an interesting mathematical matrix property appeared when I played with some functions.

Notation: $m×n$ matrix means $m$-row $n$-column matrix.

Here we go. We have a $4\times4$ matrix $A$ that contains following elements:

  1. A 3D general rotation matrix $B$ ($3\times3$) in left upper positions of $A$

    $B = \begin{bmatrix}a&b&c\\d&e&f\\g&h&i\end{bmatrix}$

    2. A random vector $aa$ ($1×3$) in left lower positions of $A$

    $aa = \begin{bmatrix}x&y&z\end{bmatrix}$

    3. An additional vector $bb$ ($4×1$) in right positions of $A$

    $bb = \begin{bmatrix}0\\0\\0\\1\end{bmatrix}$

It seems (by inspecting resulting numbers) that always when the matrix $A$ is invertible and we calculate its inverse $C$, then $C$ has this form:

  1. The transpose of the rotation matrix $B$ ($3\times3$) in left upper positions of $C$

    $B^T = \begin{bmatrix}a&d&g\\b&e&h\\c&f&i\end{bmatrix}$

    2. A vector $cc$ generally different from the vector $aa$ ($1\times3$) in left lower positions of $C$

    $cc = \begin{bmatrix}t&u&v\end{bmatrix}$

    3. An unchanged additional vector $bb$ ($4\times1$) in right positions of $C$

    $bb = \begin{bmatrix}0\\0\\0\\1\end{bmatrix}$

So, from \begin{bmatrix}a&b&c&0\\d&e&f&0\\g&h&i&0\\x&y&z&1\end{bmatrix}

we get the inverse \begin{bmatrix}a&d&g&0\\b&e&h&0\\c&f&i&0\\t&u&v&1\end{bmatrix}

How can this be explained? Is there a simple proof of this or will that be hard?

Thank you for any answers!

$\endgroup$

2 Answers 2

4
$\begingroup$

This is commonplace in computer science. The CS guys like to store a rigid motion $x\mapsto xA+b$ (here $x$ and $b$ are row vectors) in a single matrix $\pmatrix{A&0\\ b&1}$ and encode each 3D vector $x$ as a $4$-vector $\pmatrix{x&1}$, so that the rigid motion can be computed as a single matrix-vector multiplication $\pmatrix{xA+b&1}=\pmatrix{x&1}\pmatrix{A&0\\ b&1}$. And since we are talking about rigid motions, the matrix $A$ must be real orthogonal, i.e. $A^T=A^{-1}$. Geometrically, this means $A$ is composed of rotations and/or reflections.

If you want to invert the rigid motion, it is easy to verify that $\pmatrix{A&0\\ b&1}^{-1}=\pmatrix{A^{-1}&0\\ -bA^{-1}&1}$. As $A$ is orthogonal, we get $\pmatrix{A&0\\ b&1}^{-1}=\pmatrix{A^T&0\\ -bA^T&1}$ as a result.

$\endgroup$
1
  • $\begingroup$ Oh, I see. Thank you very much :-) And what about the multiplication of 2 random matrices that look like this? It seems I get again some rotation matrix A and position vector b according to your notation. How can I imagine (what is the sense of) a physical result of the multiplication of 2 such matrices and of the inversion of 1 such matrix? $\endgroup$ Nov 14, 2018 at 11:40
0
$\begingroup$

OpenGL uses row-major storage order, whereas C and C++ use column-major order. The full 4-component vector and 4×4 matrix multiplication and memory ordering is actually $$\left [ \begin{matrix} m_0 & m_4 & m_8 & m_{12} \\ m_1 & m_5 & m_9 & m_{13} \\ m_2 & m_6 & m_{10} & m_{14} \\ m_3 & m_7 & m_{11} & m_{15} \end{matrix} \right ] \left [ \begin{matrix} v_0 \\ v_1 \\ v_2 \\ v_3 \end{matrix} \right ] = \left [ \begin{matrix} m_0 v_0 + m_4 v_1 + m_8 v_2 + m_{12} v_3 \\ m_1 v_0 + m_5 v_1 + m_9 v_2 + m_{13} v_3 \\ m_2 v_0 + m_6 v_1 + m_{10} v_2 + m_{14} v_3 \\ m_3 v_0 + m_7 v_1 + m_{11} v_2 + m_{15} v_3 \end{matrix} \right ]$$ It is an unexpected quirk, and often trips programmers.

In OP's case, if we use right multiplication for matrix-vector product, then vectors are column vectors (vertical), and OP's matrices are all transposed.

user1551's answer is correct (and I arrive at the same answer here, of course), it just uses row vectors and left multiplication for the matrix-vector product. I prefer the right multiplication format, and explicitly writing out the matrices and steps, thus this answer.


The transformation matrix is defined as $$\mathbf{M} = \left [ \begin{matrix} X_x & Y_x & Z_x & T_x \\ X_y & Y_y & Z_y & T_y \\ X_z & Y_z & Z_z & T_z \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right ]$$ with vectors having an implicit fourth component 1, $$\vec{v} = \left [ \begin{matrix} v_x \\ v_y \\ v_z \\ 1 \end{matrix} \right ] $$ so that the transformed vector is $$\mathbf{M} \vec{v} = \left [ \begin{matrix} X_x & Y_x & Z_x & T_x \\ X_y & Y_y & Z_y & T_y \\ X_z & Y_z & Z_z & T_z \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right ] \left [ \begin{matrix} v_x \\ v_y \\ v_z \\ 1 \end{matrix} \right ] = \left [ \begin{matrix} X_x v_x + Y_x v_y + Z_x v_z + T_x \\ X_y v_x + Y_y v_y + Z_y v_z + T_y \\ X_z v_x + Y_z v_y + Z_z v_z + T_z \\ 1 \end{matrix} \right ]$$ The three first components of the result are the same as rotation by the upper left 3×3 matrix of $\mathbf{M}$, plus translation after rotation, $$\mathbf{R}\vec{p} + \vec{T} = \left [ \begin{matrix} X_x & Y_x & Z_x \\ X_y & Y_y & Z_y \\ X_z & Y_z & Z_z \\ \end{matrix} \right ] \left [ \begin{matrix} p_x \\ p_y \\ p_z \end{matrix} \right ] + \left [ \begin{matrix} T_x \\ T_y \\ T_z \end{matrix} \right ] = \left [ \begin{matrix} X_x p_x + Y_x p_y + Z_x p_z + T_x \\ X_y p_x + Y_y p_y + Z_y p_z + T_y \\ X_z p_x + Y_z p_y + Z_z p_z + T_z \\ \end{matrix} \right ]$$ The inverse operation is $$\mathbf{R}^{-1}\left(\vec{p} - \vec{T}\right) = \mathbf{R}^{-1}\vec{p} - \mathbf{R}^{-1}\vec{T}$$ Pure rotation matrices are orthogonal, which means their inverse is their transpose. If $\mathbf{R}$ is a rotation matrix, then $\mathbf{R}^{-1} = \mathbf{R}^T$. Then, $$\mathbf{R}^{-1}\left(\vec{p} - \vec{T}\right) = \mathbf{R}^T\vec{p} - \mathbf{R}^T\vec{T} = \left [ \begin{matrix} X_x p_x + X_y p_y + Z_x p_z - X_x T_x - X_y T_y - X_z T_z \\ Y_x p_x + Y_y p_y + Z_y p_z - Y_x T_x - Y_y T_y - Y_z T_z \\ Z_x p_x + Z_y p_y + Z_z p_z - Z_x T_x - Z_y T_y - Z_z T_z \\ \end{matrix} \right ]$$ If we use $$\vec{t} = \left [ \begin{matrix} t_x \\ t_y \\ t_z \end{matrix} \right ] = -\mathbf{R}^T\vec{T} = - \left [ \begin{matrix} X_x & X_y & X_z \\ Y_x & Y_y & Y_z \\ Z_x & Z_y & Z_z \\ \end{matrix} \right ] \left [ \begin{matrix} T_x \\ T_y \\ T_z \end{matrix} \right ] = \left [ \begin{matrix} - X_x T_x - X_y T_y - X_z T_z \\ - Y_x T_x - Y_y T_y - Y_z T_z \\ - Z_x T_x - Z_y T_y - Z_z T_z \\ \end{matrix} \right ]$$ then we can write $$\mathbf{M}^{-1}\vec{v} = \left [ \begin{matrix} X_x & X_y & X_z & t_x \\ Y_x & Y_y & Y_z & t_y \\ Z_x & Z_y & Z_z & t_z \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right ] \left [ \begin{matrix} v_x \\ v_y \\ v_z \\ 1 \end{matrix} \right ] = \left [ \begin{matrix} X_x v_x + X_y v_y + X_z v_z - X_x T_x - X_y T_y - X_z T_z \\ Y_x v_x + Y_y v_y + Y_z v_z - Y_x T_x - Y_y T_y - Y_z T_z \\ Z_x v_x + Z_y v_y + Z_z v_z - Z_x T_x - Z_y T_y - Z_z T_z \\ \end{matrix} \right ]$$ As OP observed, the inverse transformation has the upper left 3×3 submatrix transposed, and the translation part changed.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .