The matrices I use are for the canvas in webbrowsers. https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform
where [a,b,c,d,e,f] is actually described as
$$ \left[
\begin{array}{ c c }
a&c&e \\
b&d&f \\
0&0&1
\end{array} \right]
$$
Given I have a starting matrix s =
$$ \left[
\begin{array}{ c c }
1&0&0 \\
0&1&0
\end{array} \right]
$$
and I have lot of matrices to multiply s with: m1 ... mn with 6 random numbers themselves, like
$$\eqalign{
\left[
\begin{array}{r}
m1r1 & m1r3 & m1r5 \\
m1r2 & m1r4 & m1r6 \\
\end{array}
\right]
to
\left[
\begin{array}{r}
mnr1 & mnr3 & mnr5 \\
mnr2 & mnr4 & mnr6 \\
\end{array}
\right]
}$$
When I multiply s starting with m1 to mn I get sforward.
When I multiply s starting with mn to m1 I get sbackward.
When I invert sforward I get sfi.
When I invert sbackwardI get sbi.
Is there ONE matrix to multiply sforward with to get sbackward?
Is there ONE matrix to multiply sfi with to get sbi?
Is there ONE matrix to multiply sforward with to get sbi?
Just some real life example matrices for m1...mn for multiplying:
["matrix:1,0,0,0.7741935483870968,0,116.74193548387098","matrix:1,0,0,0.9166666666666666,0,43.08333333333337","matrix:1,0,0,0.8709408825978352,0,61.594504579517036","matrix:1,0,0,0.7332695984703633,0,127.29923518164435"]
I seriously hope to get rid of this amount of matrices somehow.
For multiplying and inverting I use these javascript functions:
function matrixMultiply(multiM=[1,0,0,1,0,0],onM=[1,0,0,1,0,0]) {
onM = [].concat(onM);
var m11 = onM[0]*multiM[0] + onM[2]*multiM[1];
var m12 = onM[1]*multiM[0] + onM[3]*multiM[1];
var m21 = onM[0]*multiM[2] + onM[2]*multiM[3];
var m22 = onM[1]*multiM[2] + onM[3]*multiM[3];
var dx = onM[0]*multiM[4] + onM[2]*multiM[5] + onM[4];
var dy = onM[1]*multiM[4] + onM[3]*multiM[5] + onM[5];
onM[0] = m11; onM[1] = m12; onM[2] = m21;
onM[3] = m22; onM[4] = dx; onM[5] = dy;
return onM;
};
function matrixInvert(onM=[1,0,0,1,0,0]) {
onM = [].concat(onM);
var d = 1 / (onM[0]*onM[3] - onM[1]*onM[2]);
var m0 = onM[3]*d; var m1 = -onM[1]*d; var m2 = -onM[2]*d;
var m3 = onM[0]*d; var m4 = d*(onM[2]*onM[5] - onM[3]*onM[4]); var m5 = d*(onM[1]*onM[4] - onM[0]*onM[5]);
onM[0] = m0; onM[1] = m1; onM[2] = m2;
onM[3] = m3; onM[4] = m4; onM[5] = m5;
return onM;
};