Tengo este ejemplo de lo que quiero conseguir. El segundo conjunto de rects es donde quiero llegar.
Hay dos conjuntos de rects en el enlace anterior. El primer conjunto es donde me encuentro actualmente, quiero escalar los elementos svg hacia adentro y hacia afuera. El rectángulo central es la posición inicial y el primer rectángulo es lo que sucede si el usuario se aleja y el último rectángulo es lo que sucede cuando el usuario se acerca.
Quiero que mis rects permanezcan centrados mientras se produce el escalado como se muestra en el segundo conjunto de rects.
Si mi matriz afín de partida tiene este aspecto:
$$\begin{bmatrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{bmatrix}$$
Si cambio la escala a
$$\begin{bmatrix}0.5 & 0 & 0\\0 & 0.5 & 0\\0 & 0 & 1\end{bmatrix}$$
¿Cuáles son mis cálculos para mantener la traducción del centro para el $x$ y $y$ de la matriz afín para garantizar que los elementos no se desplacen hacia la parte superior izquierda al ampliar o reducir la escala.
El resultado sería algo así:
$$\begin{bmatrix}0.5 & 0 & -22.5\\0 & 0.5 & -22.5\\0 & 0 & 1\end{bmatrix}$$
Los rects tienen una anchura de $50$ y un punto de partida de $(20, 20)$ antes de aplicar cada transformación.