--- title: "Transformation matrices" author: "Alexander (Sasha) Pastukhov" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Transformation matrices} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` For most transformation, we assume that we can compute only the translation coefficients ($a_i$). The only exception are Euclidean transformation around a _single_ axis of rotation that allow to compute a single scaling and a single rotation coefficient. In all other cases, values of computed coefficients would depend on the assumed order of individual transformation, making them no more than a potentially misleading guesses. ## Bidimensional regression ### Translation Number of parameters: 2 * translation: $a_1$, $a_2$ $$ \begin{bmatrix} 1 & 0 & a_1 \\ 0 & 1 & a_2 \\ 0 & 0 & 1 \end{bmatrix} $$ ### Euclidean Number of parameters: 4 * translation: $a_1$, $a_2$ * scaling: $\phi$ * rotation: $\theta$ $$ \begin{bmatrix} b_1 & b_2 & a_1 \\ -b_2 & b_1 & a_2 \\ 0 & 0 & 1 \end{bmatrix} $$ The Euclidean transformation is a special case, where we can compute rotation ($\theta$) and the single scaling ($\phi$) coefficients, as follows: $$ \phi = \sqrt{b_1^2 + b_2^2}\\ \theta = tan^{-1}(\frac{b_2}{b_1}) $$ ### Affine Number of parameters: 6 * translation: $a_1$, $a_2$ * scaling · rotation · sheer: $b_1$, $b_2$, $b_3$, $b_4$ $$ \begin{bmatrix} b_1 & b_2 & a_1 \\ b_3 & b_4 & a_2 \\ 0 & 0 & 1 \end{bmatrix} $$ ### Projective Number of parameters: 8 * translation: $a_1$, $a_2$ * scaling · rotation · sheer · projection: $b_1$...$b_6$ $$ \begin{bmatrix} b_1 & b_2 & a_1 \\ b_3 & b_4 & a_2 \\ b_5 & b_6 & 1 \end{bmatrix} $$ ## Tridimensional regression ### Translation Number of parameters: 3 * translation: $a_1$, $a_2$, $a_3$ $$ \begin{bmatrix} 1 & 0 & 0 & a_1 \\ 0 & 1 & 0 & a_2 \\ 0 & 0 & 1 & a_3 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ ### Euclidean Number of parameters: 5 * translation: $a_1$, $a_2$, $a_3$ * scaling: $\phi$ * rotation: $\theta$ For all Euclidean rotations, we opted to use coefficient $b_3$ to code scaling ($\phi$), whereas $b_2 = sin(\theta)$ and $b_1=\phi~ cos(\theta)$. The coefficients are computed as follows: $$ \phi = \sqrt{b_1^2 + b_2^2}\\ \theta = tan^{-1}(\frac{b_2}{b_1}) $$ #### Euclidean, rotation about x axis Note that during fitting $\phi$ is computed from $b_1$ and $b_2$ on the fly. $$ \begin{bmatrix} \phi & 0 & 0 & a_1 \\ 0 & b_1 &-b_2 & a_2 \\ 0 & b_2 & b_1 & a_3 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ #### Euclidean, rotation about y axis $$ \begin{bmatrix} b_1 & 0 & b_2 & a_1 \\ 0 & \phi & 0 & a_2 \\ -b_2 & 0 & b_1 & a_3 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ #### Euclidean, rotation about z axis $$ \begin{bmatrix} b_1 &-b_2 & 0 & a_1 \\ b_2 & b_1 & 0 & a_2 \\ 0 & 0 & \phi & a_3 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ ### Affine Number of parameters: 12 * translation: $a_1$, $a_2$, $a_3$ * scaling · rotation · sheer: $b_1$...$b_9$ $$ \begin{bmatrix} b_1 & b_2 & b_3 & a_1 \\ b_4 & b_5 & b_6 & a_2 \\ b_7 & b_8 & b_9 & a_3 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$ ### Projective Number of parameters: 15 * translation: $a_1$, $a_2$, $a_3$ * scaling · rotation · sheer · projection: $b_1$...$b_12$ $$ \begin{bmatrix} b_1 & b_2 & b_3 & a_1 \\ b_4 & b_5 & b_6 & a_2 \\ b_7 & b_8 & b_9 & a_3 \\ b_{10} & b_{11} & b_{12} & 1 \end{bmatrix} $$