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$
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$
  • $\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$ – Tomáš Martínek Nov 14 '18 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$

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.