if you had functions for each possible order, 24 functions in all, you could compute a transform for an arbitrary shear around a point, rotation around a point, scale around a point and translation in whatever order all while only making a single function call.
Ok... and why would we do that? What's your point? You should have started this very long post by explaining your intentions, instead of losing us in your maths
It would just make the library a bit faster and allow users to use all the transformation capabilities of SFML without doing matrix multiplication even once.
Typical libraries provide translation, rotation, and scale. (most don't include shear)
In order to rotate around a point you have to do two matrix multiplications. One to translate the point so that it overlaps the origin, then rotate, then translate back-- this produces a transform matrix that is effectively the same as those transformations in that order; all you have to do is multiply your vector by that transform matrix and voila, you just rotated about a specific point.
SFML provides a function that uses that specific transform matrix, called rotate and which takes both the angle and the point about which to rotate. Ditto for scale. It also provides normal translation.
If you still want to combine scale and translation, or scale and rotation, or rotation and scale, in a specific order, then you have to do old fashion matrix multiplication by using the provided multiplication operator.
Matrix multiplication is kind of slow. Part of the reason SFML provides rotations about a point is because it is convenient, the other reason is that it is faster to just use a premultplied matrix like that than it is to do basic tranlsation, then basic rotation, then translate back. Doing the former involves multplying a matrix by a vector and one function call. Doing the latter involves multiplying a vector by a matrix, and multplying a matrix by a matrix by a matrix, and 4 function calls.
Basically what I am saying is we can take it a step further. Instead of having "rotate about a point" and "scale about a point" and "translate"
We could have:
"RotateScaleTranslate( args for rotation, args for scale, args for translation)"
"RotateTranslateScale( args for rotation, args for scale, args for translation)"
"ScaleRotateTranslate( args for rotation, args for scale, args for translation)"
"ScaleTranslateRotate( args for rotation, args for scale, args for translation)"
"TranslateRotateScale( args for rotation, args for scale, args for translation)"
"TranslateScaleRotate( args for rotation, args for scale, args for translation)"
For example, the first function first rotates, then scales, and then translates. If the implementation did matrix*matrix multiplication underneath in order to generate the appropriate transform matrix, then there wouldn't be much point in using it aside from the fact that you don't have to mess around with the multiplication operator yourself in order to do rotation then scale then translation. With what I am recommending, it would NOT do matrix*matrix multiplication underneath, the transformation matrix would be precomputed and baked into the function.
If you think about it, there are no other combinations of doing these operations. There are only 6 permutations for the given 3 operations, and translation operations can be added by adding the operands (ditto for scale and rotation) so strictly speaking the user really shouldn't have to fool around with matrix multiplication in order to do combinations of those transformations in a specific order; he just needs to know about those 6 specific transformation matrices and thats all.
Thats what I'm saying. The user shouldn't have to fool around with matrix multiplication in order to do all the combinations of transforms that exist in 2d in SFML for scale, translate, and rotate.
If you want to throw in shear, the number jumps from 6 to 24 (compare 3! and 4!), that still isn't too bad, but you can't really afford to throw in another transformation operation beyond that.