{"id":75,"date":"2025-12-17T11:38:12","date_gmt":"2025-12-17T11:38:12","guid":{"rendered":"https:\/\/3d-galaxy.com\/blog\/?page_id=75"},"modified":"2025-12-17T12:01:51","modified_gmt":"2025-12-17T12:01:51","slug":"matrix-math-and-trigonometry-for-games","status":"publish","type":"page","link":"https:\/\/3d-galaxy.com\/blog\/index.php\/matrix-math-and-trigonometry-for-games\/","title":{"rendered":"Matrix Math for Game Devs"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What is a Matrix?<\/h2>\n\n\n\n<p>A matrix is just a 2-dimensional array of variables or values. Each matrix has a size, determined by its number of rows and columns. For example, a 2&#215;3 matrix (2 rows, 3 columns) can look like this:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mspace width=\"1em\"><\/mspace><mspace width=\"1em\"><\/mspace><mi>o<\/mi><mi>r<\/mi><mspace width=\"1em\"><\/mspace><mspace width=\"1em\"><\/mspace><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1.5<\/mn><\/mtd><mtd><mn>2<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>40<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>13<\/mn><\/mtd><mtd><mn>4.2<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>2<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} a &amp; b &amp; c \\\\ d &amp; e &amp; f \\end{bmatrix} \\quad \\quad or \\quad \\quad \\begin{bmatrix} 1.5 &amp; 2 &amp; 40 \\\\  13 &amp; 4.2 &amp; 2\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Matrices can be used for a variety of things, from solving equations to applying transformations to vectors, such as translation, rotation, and scale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Matrix Addition<\/h2>\n\n\n\n<p>Adding two matrices together results in a matrix which, when multiplied by a vector matrix, results in a sort of averaging effect of the matrices on the resulting vector:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>M<\/mi><mi>a<\/mi><\/msub><mo>+<\/mo><msub><mi>M<\/mi><mi>b<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2217<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>M<\/mi><mi>a<\/mi><\/msub><mo>\u2217<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>M<\/mi><mi>b<\/mi><\/msub><mo>\u2217<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">(M_a+M_b) * \\vec v = (M_a*\\vec v) + (M_b * \\vec v)<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Essentially it&#8217;s the same as applying each matrix to the vector individually, and then adding the resulting vectors together to produce the final result vector.<\/p>\n\n\n\n<p>To add two matrices together, we need the matrices to be the same dimensions, and then we just add each element of the two matrices:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>b<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>c<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>d<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>+<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>h<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>a<\/mi><mo>+<\/mo><mi>e<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>b<\/mi><mo>+<\/mo><mi>f<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mo>+<\/mo><mi>g<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>d<\/mi><mo>+<\/mo><mi>h<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} a &amp; b \\\\ c &amp; d \\end{bmatrix} + \\begin{bmatrix} e &amp; f \\\\ g &amp; h\\end{bmatrix} = \\begin{bmatrix} a+e &amp; b+f \\\\ c+g &amp; d+h\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Matrix addition has very niche uses in game development, but is used for linear blend skinning, which is a technique for calculating vertex positions based on bone weights and transforms, which would look something like this:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>s<\/mi><mi>k<\/mi><mi>i<\/mi><mi>n<\/mi><mi>n<\/mi><mi>e<\/mi><mi>d<\/mi><mtext>&nbsp;<\/mtext><mi>v<\/mi><mi>e<\/mi><mi>r<\/mi><mi>t<\/mi><mi>e<\/mi><mi>x<\/mi><mtext>&nbsp;<\/mtext><mi>p<\/mi><mi>o<\/mi><mi>s<\/mi><mi>i<\/mi><mi>t<\/mi><mi>i<\/mi><mi>o<\/mi><mi>n<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">[<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>w<\/mi><mrow><mi>b<\/mi><mn>1<\/mn><\/mrow><\/msub><mo>\u2217<\/mo><msub><mi>M<\/mi><mrow><mi>b<\/mi><mn>1<\/mn><\/mrow><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>w<\/mi><mrow><mi>b<\/mi><mn>2<\/mn><\/mrow><\/msub><mo>\u2217<\/mo><msub><mi>M<\/mi><mrow><mi>b<\/mi><mn>2<\/mn><\/mrow><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mi>.<\/mi><mi>.<\/mi><mi>.<\/mi><mo>+<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>w<\/mi><mrow><mi>b<\/mi><mi>n<\/mi><\/mrow><\/msub><mo>\u2217<\/mo><msub><mi>M<\/mi><mrow><mi>b<\/mi><mi>n<\/mi><\/mrow><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo form=\"postfix\" stretchy=\"false\">]<\/mo><mo>\u2217<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><\/mrow><annotation encoding=\"application\/x-tex\">skinned\\ vertex \\ position(\\vec v) = [(w_{b1} * M_{b1}) + (w_{b2} * M_{b2}) + &#8230; + (w_{bn}*M_{bn})] *\\vec v<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Matrix Multiplication<\/h2>\n\n\n\n<p>Matrix multiplication is often used to manipulate points, or vectors in games. We can take a transformation matrix, and when we multiply it by our vector, the result will be our vector transformed in 2D\/3D space. <\/p>\n\n\n\n<p>Matrix multiplication can also be used to create composite transformations which apply multiple transformations at once. This is done by multiplying the two transformation matrices.<\/p>\n\n\n\n<p>To multiply two matrices, A and B, matrix B must have the same number of rows as the matrix A has columns. The result of the operation is a <math data-latex=\"A_{rows} \\times B_{columns}\"><semantics><mrow><msub><mi>A<\/mi><mrow><mi>r<\/mi><mi>o<\/mi><mi>w<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>\u00d7<\/mo><msub><mi>B<\/mi><mrow><mi>c<\/mi><mi>o<\/mi><mi>l<\/mi><mi>u<\/mi><mi>m<\/mi><mi>n<\/mi><mi>s<\/mi><\/mrow><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">A_{rows} \\times B_{columns}<\/annotation><\/semantics><\/math> matrix.<\/p>\n\n\n\n<p>In the following example, note that the matrix A is a 2&#215;1 matrix, with 2 rows and 1 column. Matrix B must therefore have 1 row, but can have any number of columns. The result is a 2&#215;2 matrix (<math data-latex=\"A_{rows} \\times B_{columns}\"><semantics><mrow><msub><mi>A<\/mi><mrow><mi>r<\/mi><mi>o<\/mi><mi>w<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>\u00d7<\/mo><msub><mi>B<\/mi><mrow><mi>c<\/mi><mi>o<\/mi><mi>l<\/mi><mi>u<\/mi><mi>m<\/mi><mi>n<\/mi><mi>s<\/mi><\/mrow><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">A_{rows} \\times B_{columns}<\/annotation><\/semantics><\/math>).<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mi>a<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mi>b<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>c<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>d<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>a<\/mi><mi>c<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>a<\/mi><mi>d<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>b<\/mi><mi>c<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>b<\/mi><mi>d<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} a \\\\ b \\end{bmatrix} \\cdot \\begin{bmatrix} c &amp; d \\end{bmatrix} = \\begin{bmatrix} ac &amp; ad \\\\ bc &amp; bd\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>To calculate each value in the result, we take these steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Start out at matrix A, row 0 (the top row), and matrix B, column 0 (the left column).<\/li>\n\n\n\n<li>Multiply each value in the current row of A by the corresponding value of B current column, and sum the result of all of those multiplications.<\/li>\n\n\n\n<li>The resulting value is placed in the same row as the current matrix A row, and the same column as the current column of matrix B.<\/li>\n\n\n\n<li>If there is another column in matrix B, move on to that column and repeat the process again for the current row of matrix A. If not, reset to use column 0 of matrix B.<\/li>\n\n\n\n<li>Once all columns have been multiplied and summed, and while we have additional rows, move on to the next row of matrix A, and repeat the process until all values have been computed.<\/li>\n<\/ol>\n\n\n\n<p>Here is an example of multiplying a 2&#215;3 matrix with a 3&#215;1 matrix&#8230;the result is a 2&#215;1 matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mi>g<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mi>h<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mi>i<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>a<\/mi><mi>g<\/mi><mo>+<\/mo><mi>b<\/mi><mi>h<\/mi><mo>+<\/mo><mi>c<\/mi><mi>i<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>d<\/mi><mi>g<\/mi><mo>+<\/mo><mi>e<\/mi><mi>h<\/mi><mo>+<\/mo><mi>f<\/mi><mi>i<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} a &amp; b &amp; c \\\\ d &amp; e &amp; f \\end{bmatrix} \\cdot\\begin{bmatrix} g \\\\ h \\\\ i \\end{bmatrix} = \\begin{bmatrix} ag + bh + ci \\\\ dg + eh + fi \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>And we get a 3&#215;4 matrix when we multiply a 3&#215;2 matrix with a 2&#215;4 matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>b<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>c<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>d<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd><mi>h<\/mi><\/mtd><mtd><mi>i<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>j<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>k<\/mi><\/mtd><mtd><mi>l<\/mi><\/mtd><mtd><mi>m<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>n<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>a<\/mi><mi>g<\/mi><mo>+<\/mo><mi>b<\/mi><mi>k<\/mi><\/mrow><\/mtd><mtd><mrow><mi>a<\/mi><mi>h<\/mi><mo>+<\/mo><mi>b<\/mi><mi>l<\/mi><\/mrow><\/mtd><mtd><mrow><mi>a<\/mi><mi>i<\/mi><mo>+<\/mo><mi>b<\/mi><mi>m<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>a<\/mi><mi>j<\/mi><mo>+<\/mo><mi>b<\/mi><mi>n<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>g<\/mi><mo>+<\/mo><mi>d<\/mi><mi>k<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>h<\/mi><mo>+<\/mo><mi>d<\/mi><mi>l<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>i<\/mi><mo>+<\/mo><mi>d<\/mi><mi>m<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>c<\/mi><mi>j<\/mi><mo>+<\/mo><mi>d<\/mi><mi>n<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>e<\/mi><mi>g<\/mi><mo>+<\/mo><mi>f<\/mi><mi>k<\/mi><\/mrow><\/mtd><mtd><mrow><mi>e<\/mi><mi>h<\/mi><mo>+<\/mo><mi>f<\/mi><mi>l<\/mi><\/mrow><\/mtd><mtd><mrow><mi>e<\/mi><mi>i<\/mi><mo>+<\/mo><mi>f<\/mi><mi>m<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>e<\/mi><mi>j<\/mi><mo>+<\/mo><mi>f<\/mi><mi>n<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} a &amp; b \\\\ c &amp; d \\\\ e &amp; f \\end{bmatrix} \\cdot\\begin{bmatrix} g &amp; h &amp; i &amp; j \\\\ k &amp; l &amp; m &amp; n\\end{bmatrix} = \\begin{bmatrix} ag + bk &amp; ah + bl &amp; ai + bm &amp; aj+bn \\\\ cg+dk &amp; ch+dl &amp; ci+dm &amp; cj+dn \\\\ eg+fk &amp; eh+fl &amp; ei+fm &amp; ej+fn \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Identity Matrices<\/h2>\n\n\n\n<p>An identity matrix essentially preserves the values of a matrix when that matrix is multiplied by the identity matrix. It&#8217;s pretty much like multiplying by 1. If you have a matrix which represents an object&#8217;s 3D transform (position, rotation, and scale), then multiplying by an identity matrix will result in no change to the object&#8217;s transform.<\/p>\n\n\n\n<p>An identity matrix consists of 0s, except for the diagonal from top left to bottom right, which is composed of 1s. The following are all examples of identity matrices:<\/p>\n\n\n\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-fe554740 wp-block-group-is-layout-flex\" style=\"padding-right:0;padding-left:0\">\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 &amp; 0 \\\\ 0 &amp; 1 \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 &amp; 0 &amp; 0 \\\\ 0 &amp; 1 &amp; 0 \\\\ 0 &amp; 0 &amp; 1 \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; 0 \\\\ 0 &amp; 1 &amp; 0 &amp; 0 \\\\ 0 &amp; 0 &amp; 1 &amp; 0 \\\\ 0 &amp; 0 &amp; 0 &amp; 1 \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n<\/div>\n\n\n\n<p>In the example below, you can see how multiplying a matrix by the identity matrix results in the original matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mn>1<\/mn><mi>a<\/mi><mo>+<\/mo><mn>0<\/mn><mi>b<\/mi><mo>+<\/mo><mn>0<\/mn><mi>c<\/mi><\/mrow><\/mtd><mtd><mrow><mn>0<\/mn><mi>a<\/mi><mo>+<\/mo><mn>1<\/mn><mi>b<\/mi><mo>+<\/mo><mn>0<\/mn><mi>c<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mn>0<\/mn><mi>a<\/mi><mo>+<\/mo><mn>0<\/mn><mi>b<\/mi><mo>+<\/mo><mn>1<\/mn><mi>c<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mn>1<\/mn><mi>d<\/mi><mo>+<\/mo><mn>0<\/mn><mi>e<\/mi><mo>+<\/mo><mn>0<\/mn><mi>f<\/mi><\/mrow><\/mtd><mtd><mrow><mn>0<\/mn><mi>d<\/mi><mo>+<\/mo><mn>1<\/mn><mi>e<\/mi><mo>+<\/mo><mn>0<\/mn><mi>f<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mn>0<\/mn><mi>d<\/mi><mo>+<\/mo><mn>0<\/mn><mi>e<\/mi><mo>+<\/mo><mn>1<\/mn><mi>f<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} a &amp; b &amp; c \\\\ d &amp; e &amp; f\\end{bmatrix} \\cdot\\begin{bmatrix} 1 &amp; 0 &amp; 0 \\\\ 0 &amp; 1 &amp; 0 \\\\ 0 &amp; 0 &amp; 1\\end{bmatrix} = \\begin{bmatrix} 1a+0b+0c &amp; 0a+1b+0c &amp; 0a+0b+1c \\\\ 1d+0e+0f &amp; 0d+1e+0f &amp; 0d+0e+1f \\end{bmatrix} = \\begin{bmatrix} a &amp; b &amp; c \\\\ d &amp; e &amp; f\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Transpose of a Matrix<\/h2>\n\n\n\n<p>The transpose of a matrix flips a matrix around its diagonal, changing the rows values into column values and vice versa.<\/p>\n\n\n\n<p>For example, given a matrix, M:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>M<\/mi><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">M = \\begin{bmatrix} a &amp; b &amp; c \\\\ d &amp; e &amp; f \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>If we take the transpose of the matrix (denoted with a superscript T), we swap around the diagonal, a&#8230;e&#8230;etc.:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msup><mi>M<\/mi><mi>T<\/mi><\/msup><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>d<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>e<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>c<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">M^T = \\begin{bmatrix} a &amp; d \\\\ b &amp; e \\\\ c &amp; f\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Determinants<\/h2>\n\n\n\n<p>A determinant can only be found for square matrices. Determinants of matrices are useful for a number of things:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Finding out whether a matrix has an inverse matrix or not.<\/li>\n\n\n\n<li>Determining whether a formula has a single solution in a linear system (<math data-latex=\"Ax = b\"><semantics><mrow><mi>A<\/mi><mi>x<\/mi><mo>=<\/mo><mi>b<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">Ax = b<\/annotation><\/semantics><\/math>).<\/li>\n\n\n\n<li>Calculating the signed area of a parallelogram or a triangle between two 2D vectors.<\/li>\n\n\n\n<li>Calculating the signed volume of a parallelepiped formed by three 3D vectors.<\/li>\n\n\n\n<li>Measuring how much a matrix will scale area (in 2D) or volume (in 3D).<\/li>\n\n\n\n<li>Determining whether a matrix will preserve a vector&#8217;s orientation or reverse it.<\/li>\n<\/ol>\n\n\n\n<p>To find the determinant of a matrix, we take the sums of the multiples of all diagonals, from top left to bottom right, and subtract the sum of the multiples of all diagonals which go from top right to bottom left. <\/p>\n\n\n\n<p>As an example, here is how the determinant is calculated for a 3&#215;3 matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>M<\/mi><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd><mi>h<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>i<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo stretchy=\"false\">\u2192<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc1a<\/mi><\/mrow><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mrow><mi style=\"color:#00FF00;\">\ud835\udc1e<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd><mi>h<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc22<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>+<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mrow><mi style=\"color:#00FF00;\">\ud835\udc1b<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc1f<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc20<\/mi><\/mrow><\/mtd><mtd><mi>h<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>i<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>+<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc1c<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc1d<\/mi><\/mrow><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd><mrow><mi style=\"color:#00FF00;\">\ud835\udc21<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>i<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u2212<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc1c<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mrow><mi style=\"color:#ff0000;\">\ud835\udc1e<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc20<\/mi><\/mrow><\/mtd><mtd><mi>h<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>i<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u2212<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd><mrow><mi style=\"color:#ff0000;\">\ud835\udc1b<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc1d<\/mi><\/mrow><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>f<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd><mi>h<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc22<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u2212<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc1a<\/mi><\/mrow><\/mtd><mtd><mi>b<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>c<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>d<\/mi><\/mtd><mtd><mi>e<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc1f<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>g<\/mi><\/mtd><mtd><mrow><mi style=\"color:#ff0000;\">\ud835\udc21<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>i<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">M =\\begin{bmatrix} a &amp; b &amp; c \\\\ d &amp; e &amp; f \\\\ g &amp; h &amp; i\\end{bmatrix} \\rightarrow \\begin{bmatrix} \\color{green}\\bold a &amp; b &amp; c \\\\ d &amp; \\color{green}\\bold e &amp; f \\\\ g &amp; h &amp; \\color{green}\\bold i \\end{bmatrix} + \\begin{bmatrix} a &amp; \\color{green} \\bold b &amp; c \\\\ d &amp; e &amp; \\color{green}\\bold f \\\\ \\color{green}\\bold g &amp; h &amp; i \\end{bmatrix} + \\begin{bmatrix} a &amp; b &amp; \\color{green}\\bold c \\\\ \\color{green}\\bold d &amp; e &amp; f \\\\ g &amp; \\color{green}\\bold h &amp; i\\end{bmatrix} &#8211; \\begin{bmatrix} a &amp; b &amp; \\color{red}\\bold c \\\\ d &amp; \\color{red}\\bold e &amp; f \\\\ \\color{red}\\bold g &amp; h &amp; i \\end{bmatrix} &#8211; \\begin{bmatrix} a &amp; \\color{red}\\bold b &amp; c \\\\ \\color{red}\\bold d &amp; e &amp; f \\\\ g &amp; h &amp; \\color{red}\\bold i \\end{bmatrix} &#8211; \\begin{bmatrix} \\color{red}\\bold a &amp; b &amp; c \\\\ d &amp; e &amp; \\color{red}\\bold f \\\\ g &amp; \\color{red}\\bold h &amp; i \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>d<\/mi><mi>e<\/mi><mi>t<\/mi><mi>e<\/mi><mi>r<\/mi><mi>m<\/mi><mi>i<\/mi><mi>n<\/mi><mi>a<\/mi><mi>n<\/mi><mi>t<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\" style=\"color:#00FF00;\">(<\/mo><mi style=\"color:#00FF00;\">a<\/mi><mi style=\"color:#00FF00;\">e<\/mi><mi style=\"color:#00FF00;\">i<\/mi><mo style=\"color:#00FF00;\">+<\/mo><mi style=\"color:#00FF00;\">b<\/mi><mi style=\"color:#00FF00;\">f<\/mi><mi style=\"color:#00FF00;\">g<\/mi><mo style=\"color:#00FF00;\">+<\/mo><mi style=\"color:#00FF00;\">c<\/mi><mi style=\"color:#00FF00;\">d<\/mi><mi style=\"color:#00FF00;\">h<\/mi><mo form=\"postfix\" stretchy=\"false\" style=\"color:#00FF00;\">)<\/mo><mo style=\"color:white;\">\u2212<\/mo><mo form=\"prefix\" stretchy=\"false\" style=\"color:#ff0000;\">(<\/mo><mi style=\"color:#ff0000;\">c<\/mi><mi style=\"color:#ff0000;\">e<\/mi><mi style=\"color:#ff0000;\">g<\/mi><mo style=\"color:#ff0000;\">+<\/mo><mi style=\"color:#ff0000;\">b<\/mi><mi style=\"color:#ff0000;\">d<\/mi><mi style=\"color:#ff0000;\">i<\/mi><mo style=\"color:#ff0000;\">+<\/mo><mi style=\"color:#ff0000;\">a<\/mi><mi style=\"color:#ff0000;\">f<\/mi><mi style=\"color:#ff0000;\">h<\/mi><mo form=\"postfix\" stretchy=\"false\" style=\"color:#ff0000;\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">determinant(M) = \\color{green}(aei+bfg+cdh) \\color{white} &#8211; \\color{red}(ceg + bdi + afh)<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>And for a 2&#215;2 matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>M<\/mi><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>b<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>c<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mi>d<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo stretchy=\"false\">\u2192<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc1a<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>b<\/mi><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mi>c<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#00FF00;\">\ud835\udc1d<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u2212<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mi>a<\/mi><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc1b<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi style=\"color:#ff0000;\">\ud835\udc1c<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mi>d<\/mi><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">M = \\begin{bmatrix} a &amp; b \\\\ c &amp; d \\end{bmatrix} \\rightarrow \\begin{bmatrix} \\color{green}\\bold a &amp; b \\\\ c &amp; \\color{green}\\bold d \\end{bmatrix} &#8211; \\begin{bmatrix} a &amp; \\color{red}\\bold b \\\\ \\color{red}\\bold c &amp; d \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>d<\/mi><mi>e<\/mi><mi>t<\/mi><mi>e<\/mi><mi>r<\/mi><mi>m<\/mi><mi>i<\/mi><mi>n<\/mi><mi>a<\/mi><mi>n<\/mi><mi>t<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mi style=\"color:#00FF00;\">a<\/mi><mi style=\"color:#00FF00;\">d<\/mi><mo style=\"color:white;\">\u2212<\/mo><mi style=\"color:#ff0000;\">b<\/mi><mi style=\"color:#ff0000;\">c<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">determinant(M) = \\color{green}ad \\color{white}- \\color{red}bc<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Checking if a matrix has an inverse<\/h3>\n\n\n\n<p>Determinants are useful for quickly determining if a matrix has in inverse. If the determinant is non-zero, and the matrix is a square matrix, it has an inverse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Inverse of a Matrix<\/h2>\n\n\n\n<p>An inverse matrix is a matrix which, when multiplied by some other matrix, results in an identity matrix. These matrices can be used to perform the inverse  operation of another matrix. For example, if you use a matrix to rotate a vector, then multiplying by the inverse of that matrix will undo the rotation.<\/p>\n\n\n\n<p>For a matrix to have an inverse, it needs to be a square matrix (meaning it has the same number of rows and columns), and it must have a non-zero determinant.<\/p>\n\n\n\n<p>To calculate the inverse matrix (denoted by a superscript <sup>-1<\/sup>), we divide a matrix&#8217;s adjugate matrix by the determinant of the matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msup><mi>M<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mn>1<\/mn><\/mrow><\/msup><mo>=<\/mo><mfrac><mrow><mi>a<\/mi><mi>d<\/mi><mi>j<\/mi><mi>u<\/mi><mi>g<\/mi><mi>a<\/mi><mi>t<\/mi><mi>e<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><mrow><mi>d<\/mi><mi>e<\/mi><mi>t<\/mi><mi>e<\/mi><mi>r<\/mi><mi>m<\/mi><mi>i<\/mi><mi>n<\/mi><mi>a<\/mi><mi>n<\/mi><mi>t<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">M^{-1} = \\frac{adjugate(M)}{determinant(M)}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Calculating the Adjugate Matrix<\/h3>\n\n\n\n<p>An adjucate matrix can be found by taking the transpose of a cofactor matrix. A cofactor matrix is formed by taking the minor of each element in a matrix, and then multiplying by a power of -1, where the power depends on the position of the element in the matrix.<\/p>\n\n\n\n<p>For each element of a matrix, we take the minor by eliminating all values of the row and column that element is in, then taking the determinant of the remaining values.<\/p>\n\n\n\n<p>Consider the matrix below, where each value is attributed with a row and column, for example, the top right is in row 1, column 3.<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><msub style=\"color:#ff0000;\"><mi>v<\/mi><mn>1,1<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><msub style=\"color:#ff0000;\"><mi>v<\/mi><mn>1,2<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub style=\"color:#FF8000;\"><mi>v<\/mi><mn>1,3<\/mn><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>2,1<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mrow><mn>2<\/mn><mo separator=\"true\">,<\/mo><mn>2<\/mn><\/mrow><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub style=\"color:#ff0000;\"><mi>v<\/mi><mn>2,3<\/mn><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>3,1<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>3,2<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub style=\"color:#ff0000;\"><mi>v<\/mi><mn>3,3<\/mn><\/msub><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} \\color{red} v_{1,1} &amp; \\color{red} v_{1,2} &amp; \\color{orange} v_{1,3} \\\\ \\color{yellow} v_{2,1} &amp; \\color{yellow} v_{2, 2} &amp; \\color{red} v_{2,3} \\\\ \\color{yellow} v_{3,1} &amp; \\color{yellow} v_{3,2} &amp; \\color{red} v_{3,3} \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>In order to find the minor for <math data-latex=\"v_{1,3}\"><semantics><msub><mi>v<\/mi><mn>1,3<\/mn><\/msub><annotation encoding=\"application\/x-tex\">v_{1,3}<\/annotation><\/semantics><\/math> we remove all values in row 1, and all values in column 3, which gives us a matrix like this:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>m<\/mi><mi>i<\/mi><mi>n<\/mi><mi>o<\/mi><mi>r<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>v<\/mi><mn>1,3<\/mn><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mi>d<\/mi><mi>e<\/mi><mi>t<\/mi><mi>e<\/mi><mi>r<\/mi><mi>m<\/mi><mi>i<\/mi><mi>n<\/mi><mi>a<\/mi><mi>n<\/mi><mi>t<\/mi><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>2,1<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>2,2<\/mn><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>3,1<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub style=\"color:#FFFF00;\"><mi>v<\/mi><mn>3,2<\/mn><\/msub><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>v<\/mi><mn>2,1<\/mn><\/msub><mo>\u2217<\/mo><msub><mi>v<\/mi><mn>3,2<\/mn><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>v<\/mi><mn>2,2<\/mn><\/msub><mo>\u2217<\/mo><msub><mi>v<\/mi><mn>3,1<\/mn><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">minor(v_{1,3}) = determinant\\begin{bmatrix} \\color{yellow}v_{2,1} &amp; \\color{yellow}v_{2,2} \\\\ \\color{yellow}v_{3,1} &amp; \\color{yellow}v_{3,2} \\end{bmatrix} = (v_{2,1}*v_{3,2}) &#8211; (v_{2,2}*v_{3,1})<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Then we take the cofactor and multiply it by the minor. The cofactor is <math data-latex=\"(-1)^{row + column}\"><semantics><mrow><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mo form=\"prefix\" stretchy=\"false\">\u2212<\/mo><mn>1<\/mn><msup><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mrow><mi>r<\/mi><mi>o<\/mi><mi>w<\/mi><mo>+<\/mo><mi>c<\/mi><mi>o<\/mi><mi>l<\/mi><mi>u<\/mi><mi>m<\/mi><mi>n<\/mi><\/mrow><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">(-1)^{row + column}<\/annotation><\/semantics><\/math>. So in this case:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>c<\/mi><mi>o<\/mi><mi>f<\/mi><mi>a<\/mi><mi>c<\/mi><mi>t<\/mi><mi>o<\/mi><mi>r<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>v<\/mi><mn>1,3<\/mn><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mo form=\"prefix\" stretchy=\"false\">\u2212<\/mo><mn>1<\/mn><msup><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mrow><mn>1<\/mn><mo>+<\/mo><mn>3<\/mn><\/mrow><\/msup><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mo form=\"prefix\" stretchy=\"false\">\u2212<\/mo><mn>1<\/mn><msup><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mn>4<\/mn><\/msup><mo>=<\/mo><mn>1<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">cofactor(v_{1,3}) = (-1)^{1+3} = (-1)^4 = 1<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>It&#8217;s more intuitive to look at a matrix to understand what the cofactor value for any given element would be. As you can see below, the value alternates between 1 and -1 based on whether the row and column for any element are even and odd. This scales up and down for all matrix sizes:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><mtd><mrow><mo style=\"color:#FFFF00;\">\u2212<\/mo><mn style=\"color:#FFFF00;\">1<\/mn><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mn style=\"color:#00FF00;\">1<\/mn><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} \\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1\\\\\\color{yellow}-1 &amp; \\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1 &amp; \\color{yellow}-1\\\\\n\\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1&amp; \\color{yellow}-1 &amp; \\color{green}1\\\\ \\color{yellow}-1 &amp; \\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1 &amp; \\color{yellow}-1 \\\\\\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1 &amp; \\color{yellow}-1 &amp; \\color{green}1\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>So, to get our cofactor matrix, we do this process and compute the minor value for each element in the original matrix, then multiply that by the appropriate 1\/-1 cofactor, and then place the result in a matrix in the same row and column as the element\/value being evaluated.<\/p>\n\n\n\n<p>We then take the transpose of this cofactor matrix, and that gives us the adjugate matrix.<\/p>\n\n\n\n<p>Dividing the adjugate by the original matrix&#8217;s determinant gives us our inverse matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>I<\/mi><mi>n<\/mi><mi>v<\/mi><mi>e<\/mi><mi>r<\/mi><mi>s<\/mi><mi>e<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><msup><mi>M<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mn>1<\/mn><\/mrow><\/msup><mo>=<\/mo><mfrac><mrow><mi>a<\/mi><mi>d<\/mi><mi>j<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><mrow><mi>d<\/mi><mi>e<\/mi><mi>t<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>M<\/mi><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">Inverse(M) = M^{-1} = \\frac{adj(M)}{det(M)}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Translation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2D Translation<\/h3>\n\n\n\n<p>To translate a vector by some amount in 2D space, we multiply a translation matrix by a matrix representing our 2D vector. First we build the translation matrix using the 3&#215;3 identity matrix, and we set the right-most column&#8217;s values to the X and Y offsets we want to apply to our vector.<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>T<\/mi><mi>r<\/mi><mi>a<\/mi><mi>n<\/mi><mi>s<\/mi><mi>l<\/mi><mi>a<\/mi><mi>t<\/mi><mi>i<\/mi><mi>o<\/mi><mi>n<\/mi><mtext>&nbsp;<\/mtext><mi>M<\/mi><mi>a<\/mi><mi>t<\/mi><mi>r<\/mi><mi>i<\/mi><mi>x<\/mi><mtext>&nbsp;<\/mtext><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>T<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">Translation\\ Matrix \\ (T)= \\begin{bmatrix} 1 &amp; 0 &amp; offset_x \\\\ 0 &amp; 1 &amp; offset_y \\\\ 0 &amp; 0 &amp; 1 \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>We then multiply the translation matrix by our vector matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>O<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><mi>t<\/mi><mtext>&nbsp;<\/mtext><mi>V<\/mi><mi>e<\/mi><mi>c<\/mi><mi>t<\/mi><mi>o<\/mi><mi>r<\/mi><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><mi>t<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">Offset\\ Vector= \\begin{bmatrix} 1 &amp; 0 &amp; offset_x \\\\ 0 &amp; 1 &amp; offset_y \\\\ 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot\\begin{bmatrix} \\vec v_x \\\\ \\vec v_y \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} \\vec v_x+offset_x \\\\ \\vec v_y + offset_y \\\\ 1\\end{bmatrix} = \\vec v + offset<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3D Translation<\/h3>\n\n\n\n<p>To translate a vector by some offset in 3D, we essentially do the same thing as in 2D, but we use a 4&#215;4 identity matrix for our translation matrix, including the Z value for our offset, and we use a 4&#215;1 array for our vector&#8217;s matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>O<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><mi>t<\/mi><mtext>&nbsp;<\/mtext><mi>V<\/mi><mi>e<\/mi><mi>c<\/mi><mi>t<\/mi><mi>o<\/mi><mi>r<\/mi><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mi>p<\/mi><mi>o<\/mi><mi>i<\/mi><mi>n<\/mi><mi>t<\/mi><mo>+<\/mo><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><mi>t<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">Offset\\ Vector= \\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; offset_x \\\\ 0 &amp; 1 &amp; 0 &amp; offset_y \\\\ 0 &amp; 0 &amp; 1 &amp; offset_z \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot\\begin{bmatrix} \\vec v_x \\\\ \\vec v_y \\\\ \\vec v_z \\\\ 1\\end{bmatrix} = \\begin{bmatrix} \\vec v_x + offset_x \\\\ \\vec v_y + offset_y \\\\\\vec v_z + offset_z \\\\ 1 \\end{bmatrix} = point + offset<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Rotation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2D Rotation<\/h3>\n\n\n\n<p>For 2D rotations, the following 2&#215;2 matrix can be used, where <math data-latex=\"\\theta\"><semantics><mi>\u03b8<\/mi><annotation encoding=\"application\/x-tex\">\\theta<\/annotation><\/semantics><\/math> is the angle of rotation:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>r<\/mi><mi>o<\/mi><mi>t<\/mi><mi>a<\/mi><mi>t<\/mi><mi>i<\/mi><mi>o<\/mi><msub><mi>n<\/mi><mrow><mn>2<\/mn><mi>d<\/mi><\/mrow><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">rotation_{2d}(\\vec v) = \\begin{bmatrix} cos\\theta &amp; -sin\\theta \\\\ sin\\theta &amp; cos\\theta\\end{bmatrix} \\cdot \\begin{bmatrix} \\vec v_x \\\\ \\vec v_y \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Or if using in combination with other transformations such as translation and scale (created by combining with a 1&#215;1 larger identity matrix):<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>r<\/mi><mi>o<\/mi><mi>t<\/mi><mi>a<\/mi><mi>t<\/mi><mi>i<\/mi><mi>o<\/mi><msub><mi>n<\/mi><mrow><mn>2<\/mn><mi>d<\/mi><\/mrow><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">rotation_{2d}(\\vec v) = \\begin{bmatrix} cos\\theta &amp; -sin\\theta &amp; 0 \\\\ sin\\theta &amp; cos\\theta &amp; 0 \\\\ 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot \\begin{bmatrix} \\vec v_x \\\\ \\vec v_y \\\\ 1\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3D Rotation<\/h3>\n\n\n\n<p>Rotations can be performed on a 3D vector on a per-axis basis, where <math data-latex=\"\\theta\"><semantics><mi>\u03b8<\/mi><annotation encoding=\"application\/x-tex\">\\theta<\/annotation><\/semantics><\/math> is the rotation angle around that axis, the following matrices can be used:<\/p>\n\n\n\n<p>And for 3D:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>X<\/mi><mrow><mi>a<\/mi><mi>x<\/mi><mi>i<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mspace width=\"1em\"><\/mspace><mspace width=\"1em\"><\/mspace><msub><mi>Y<\/mi><mrow><mi>a<\/mi><mi>x<\/mi><mi>i<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mspace width=\"1em\"><\/mspace><mspace width=\"1em\"><\/mspace><msub><mi>Z<\/mi><mrow><mi>a<\/mi><mi>x<\/mi><mi>i<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">X_{axis} = \\begin{bmatrix} 1 &amp; 0 &amp; 0 \\\\ 0 &amp; cos\\theta &amp; -sin\\theta \\\\ 0 &amp; sin\\theta &amp; cos\\theta\\end{bmatrix} \\quad \\quad Y_{axis} = \\begin{bmatrix} cos\\theta &amp; 0 &amp; sin\\theta \\\\ 0 &amp; 1 &amp; 0 \\\\ -sin\\theta &amp; 0 &amp; cos\\theta\\end{bmatrix} \\quad \\quad Z_{axis} = \\begin{bmatrix} cos\\theta &amp; -sin\\theta &amp; 0 \\\\ sin\\theta &amp; cos\\theta &amp; 0 \\\\ 0 &amp; 0 &amp; 1 \\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>And when using rotation matrices in combination with other transformations, such as translation and scale, the following matrices can be created by combining the rotation matrices with a 1&#215;1 larger identity matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>X<\/mi><mrow><mi>a<\/mi><mi>x<\/mi><mi>i<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mspace width=\"1em\"><\/mspace><mspace width=\"1em\"><\/mspace><msub><mi>Y<\/mi><mrow><mi>a<\/mi><mi>x<\/mi><mi>i<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mspace width=\"1em\"><\/mspace><mspace width=\"1em\"><\/mspace><msub><mi>Z<\/mi><mrow><mi>a<\/mi><mi>x<\/mi><mi>i<\/mi><mi>s<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">X_{axis} = \\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; 0\\\\ 0 &amp; cos\\theta &amp; -sin\\theta &amp; 0 \\\\ 0 &amp; sin\\theta &amp; cos\\theta &amp; 0 \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\quad \\quad Y_{axis} = \\begin{bmatrix} cos\\theta &amp; 0 &amp; sin\\theta &amp; 0 \\\\ 0 &amp; 1 &amp; 0 &amp; 0\\\\ -sin\\theta &amp; 0 &amp; cos\\theta &amp; 0 \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\quad \\quad Z_{axis} = \\begin{bmatrix} cos\\theta &amp; -sin\\theta &amp; 0 &amp; 0 \\\\ sin\\theta &amp; cos\\theta &amp; 0 &amp; 0 \\\\ 0 &amp; 0 &amp; 1 &amp; 0 \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Additionally, for rotations around an arbitrary axis (in any direction), we can define a unit vector, <math data-latex=\"\\vec a\"><semantics><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><annotation encoding=\"application\/x-tex\">\\vec a<\/annotation><\/semantics><\/math>, as the axis we want to rotate around, and use the following matrix for the transformation:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>R<\/mi><mi>o<\/mi><mi>t<\/mi><mi>a<\/mi><mi>t<\/mi><mi>i<\/mi><mi>o<\/mi><mi>n<\/mi><mtext>&nbsp;<\/mtext><mi>M<\/mi><mi>a<\/mi><mi>t<\/mi><mi>r<\/mi><mi>i<\/mi><mi>x<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><msubsup><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><mn>2<\/mn><\/msubsup><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><msubsup><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><mn>2<\/mn><\/msubsup><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><msub><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><msubsup><mover><mi>a<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><mn>2<\/mn><\/msubsup><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>1<\/mn><mo>\u2212<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">Rotation\\ Matrix(\\vec a) = \\begin{bmatrix} \\vec a_x^2 (1-cos\\theta) + cos\\theta &amp; \\vec a_x\\vec a_y(1-cos\\theta) &#8211; \\vec a_zsin\\theta &amp; \\vec a_x\\vec a_z(1-cos\\theta)+\\vec a_ysin\\theta \\\\ \\vec a_x\\vec a_y(1-cos\\theta) + \\vec a_zsin\\theta &amp; \\vec a_y^2(1-cos\\theta)+cos\\theta &amp; \\vec a_y\\vec a_z(1-cos\\theta)-\\vec a_xsin\\theta \\\\ \\vec a_x \\vec a_z(1-cos\\theta)-\\vec a_ysin\\theta &amp; \\vec a_y \\vec a_z(1-cos\\theta) + \\vec a_xsin\\theta &amp; \\vec a_z^2(1-cos\\theta) + cos\\theta\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Scale<\/h2>\n\n\n\n<p>To scale a vector by some amount, we simply replace the values in an identity matrix with our scale values for each dimension, and then multiply the matrix by our vector, <math data-latex=\"\\vec v\"><semantics><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><annotation encoding=\"application\/x-tex\">\\vec v<\/annotation><\/semantics><\/math>, to get our scaled result, <math data-latex=\"\\vec s\"><semantics><mover><mi>s<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><annotation encoding=\"application\/x-tex\">\\vec s<\/annotation><\/semantics><\/math>. In 2D:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>s<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>s<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} scale_x &amp; 0 &amp; 0\\\\ 0 &amp; scale_y &amp; 0 \\\\ 0 &amp; 0 &amp; 1 \\end{bmatrix} \\cdot\\begin{bmatrix} \\vec v_x \\\\ \\vec v_y \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} \\vec s_x \\\\ \\vec s_y \\\\ 1\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>And in 3D:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>v<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>s<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>x<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>s<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>y<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><msub><mover><mi>s<\/mi><mo stretchy=\"false\" style=\"transform:scale(0.75) translate(10%, 30%);\">\u2192<\/mo><\/mover><mi>z<\/mi><\/msub><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} scale_x &amp; 0 &amp; 0 &amp; 0\\\\ 0 &amp; scale_y &amp; 0 &amp; 0 \\\\ 0 &amp; 0 &amp; scale_z &amp; 0\\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot\\begin{bmatrix} \\vec v_x \\\\ \\vec v_y \\\\ \\vec v_z \\\\ 1\\end{bmatrix} = \\begin{bmatrix} \\vec s_x \\\\ \\vec s_y \\\\ \\vec s_z \\\\ 1\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">The Transformation Matrix (Translation, Rotation, and Scale &#8211; Together)<\/h2>\n\n\n\n<p>One of the nice features of matrices is that, using matrix multiplication, we can combine them into a composite matrix. This is often utilized in game engines to improve efficiency and performance, since we can combine our rotation, translation, and scale into a single matrix, reducing the number of calculations by two thirds. <\/p>\n\n\n\n<p>But we have to make sure we do these operations in the right order, since the result is order-dependent. Usually, game engines compute the composite transformation matrix such that the scale is applied first, then the rotation, and lastly, the translation: <math data-latex=\"T \\cdot R \\cdot S\"><semantics><mrow><mi>T<\/mi><mo>\u22c5<\/mo><mi>R<\/mi><mo>\u22c5<\/mo><mi>S<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">T \\cdot R \\cdot S<\/annotation><\/semantics><\/math>. That looks like this:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mi>T<\/mi><mi>R<\/mi><mi>S<\/mi><mtext>&nbsp;<\/mtext><mi>M<\/mi><mi>a<\/mi><mi>t<\/mi><mi>r<\/mi><mi>i<\/mi><mi>x<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; offset_x \\\\ 0 &amp; 1 &amp; 0 &amp; offset_y \\\\ 0 &amp; 0 &amp; 1 &amp; offset_z \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot \\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; 0\\\\ 0 &amp; cos\\theta &amp; -sin\\theta &amp; 0 \\\\ 0 &amp; sin\\theta &amp; cos\\theta &amp; 0 \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot \\begin{bmatrix} scale_x &amp; 0 &amp; 0 &amp; 0\\\\ 0 &amp; scale_y &amp; 0 &amp; 0 \\\\ 0 &amp; 0 &amp; scale_z &amp; 0\\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} = TRS\\ Matrix<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>It&#8217;s important to keep in mind that matrices are multiplied with the right-most pair first, which gives us the combined rotation and scale:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mo>\u2212<\/mo><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>i<\/mi><mi>n<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd><mrow><mi>c<\/mi><mi>o<\/mi><mi>s<\/mi><mi>\u03b8<\/mi><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mrow><mi>s<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><msub><mi>e<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mn>0<\/mn><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mi>R<\/mi><mi>o<\/mi><mi>t<\/mi><mi>a<\/mi><mi>t<\/mi><mi>i<\/mi><mi>o<\/mi><mi>n<\/mi><mtext>&nbsp;<\/mtext><mi>a<\/mi><mi>n<\/mi><mi>d<\/mi><mtext>&nbsp;<\/mtext><mi>S<\/mi><mi>c<\/mi><mi>a<\/mi><mi>l<\/mi><mi>e<\/mi><mtext>&nbsp;<\/mtext><mi>M<\/mi><mi>a<\/mi><mi>t<\/mi><mi>r<\/mi><mi>i<\/mi><mi>x<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; 0\\\\ 0 &amp; cos\\theta &amp; -sin\\theta &amp; 0 \\\\ 0 &amp; sin\\theta &amp; cos\\theta &amp; 0 \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot \\begin{bmatrix} scale_x &amp; 0 &amp; 0 &amp; 0\\\\ 0 &amp; scale_y &amp; 0 &amp; 0 \\\\ 0 &amp; 0 &amp; scale_z &amp; 0\\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} = Rotation \\ and\\ Scale\\ Matrix<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Then, we multiply the RS matrix and the translation matrix:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>x<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>y<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>1<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>o<\/mi><mi>f<\/mi><mi>f<\/mi><mi>s<\/mi><mi>e<\/mi><msub><mi>t<\/mi><mi>z<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd><mn>0<\/mn><\/mtd><mtd style=\"padding-right:0em;\"><mn>1<\/mn><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>\u22c5<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center center center center\"><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>11<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>12<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>13<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>14<\/mn><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>21<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>22<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>23<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>24<\/mn><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>31<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>32<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>33<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>34<\/mn><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>41<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>42<\/mn><\/msub><\/mrow><\/mtd><mtd><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>43<\/mn><\/msub><\/mrow><\/mtd><mtd style=\"padding-right:0em;\"><mrow><mi>R<\/mi><msub><mi>S<\/mi><mn>44<\/mn><\/msub><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mo>=<\/mo><mi>T<\/mi><mi>R<\/mi><mi>S<\/mi><mtext>&nbsp;<\/mtext><mi>M<\/mi><mi>a<\/mi><mi>t<\/mi><mi>r<\/mi><mi>i<\/mi><mi>x<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix} 1 &amp; 0 &amp; 0 &amp; offset_x \\\\ 0 &amp; 1 &amp; 0 &amp; offset_y \\\\ 0 &amp; 0 &amp; 1 &amp; offset_z \\\\ 0 &amp; 0 &amp; 0 &amp; 1\\end{bmatrix} \\cdot \\begin{bmatrix} RS_{11} &amp; RS_{12} &amp; RS_{13} &amp; RS_{14} \\\\ RS_{21} &amp; RS_{22} &amp; RS_{23} &amp; RS_{24} \\\\ RS_{31} &amp; RS_{32} &amp; RS_{33} &amp; RS_{34} \\\\ RS_{41} &amp; RS_{42} &amp; RS_{43} &amp; RS_{44}\\end{bmatrix} = TRS\\ Matrix<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is a Matrix? A matrix is just a 2-dimensional array of variables or values. Each matrix has a size, determined by its number of rows and columns. For example, a 2&#215;3 matrix (2 rows, 3 columns) can look like this: Matrices can be used for a variety of things, from solving equations to applying [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-75","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/pages\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=75"}],"version-history":[{"count":13,"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/pages\/75\/revisions"}],"predecessor-version":[{"id":581,"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/pages\/75\/revisions\/581"}],"wp:attachment":[{"href":"https:\/\/3d-galaxy.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}