Here are two different pieces of code
This is what I started with
Vector2 hold = Vector2.Transform(pos1, mat1);
Matrix inv = Matrix.Invert(mat2);
Vector2 pos2 = Vector2.Transform(hold, inv);
And this is what i'm told is the simplified version
Matrix matrix1to2 = mat1 * Matrix.Invert(mat2);
Vector2 pos2 = Vector2.Transform(pos1, matrix1to2);
What I don't understand is, why isn't the first line in the simpilifed version
Matrix matrix1to2 = Matrix.Invert(mat2)*mat1;
Since in matrix order it looks like the matrix on the right would take effect first and in the original we have mat1 being multiplied in first
Another example,
The following image shows the order of operations desired
http://www.riemers.net/images/Tutorials/XNA/Csharp/Series2D/mat1.png
The tutorial says that to create this transformation you use;
Matrix carriageMat = Matrix.CreateTranslation(0, -carriage.Height, 0) * Matrix.CreateScale(playerScaling)
* Matrix.CreateTranslation(xPos, yPos, 0) * Matrix.Identity;
How could this work if the the order was left to right?