In W3C's spec, si dice:L'ordine applicazione di SVG trasforma
Il valore del 'trasformare' attributo è un < trasformare-list>, che è definito come un elenco di trasformare definizioni, che vengono applicati nell'ordine fornito.
...
Se viene fornito un elenco di trasformazioni, allora l'effetto netto è come se ogni transform era stato specificato separatamente, nell'ordine fornito
Quando ho provato le marcature seguire in firefox, chrome e IE10, tutti e tre resi facendo tradurre prima, poi seguendo da ruotare! Vedi lo codepen snippet. Cosa mi sono perso qui? Oppure le implementazioni dei 3 browser non sono conformi al W3C?
<svg width="180" height="200"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- This is the element before translation and rotation are applied -->
<rect x="0" y="0" height="100" width="100" style="stroke:#000; fill: #0086B2" fill-opacity=0.2 stroke-opacity=0.2></rect>
<!-- Now we add a text element and apply rotate and translate to both -->
<rect x="0" y="0" height="100" width="100" style="stroke:#000; fill: #0086B2" transform="rotate(45 100 50) translate(50)"></rect>
</svg>
Un gioco rapido con il codepen sembra confermare quello che avevo sospettato. La traduzione dipende dall'angolo di rotazione. Supponi di iniziare con un'auto che punta a nord. Se lo sposti a 5 m in avanti, avrai mosso 5 m in direzione nord. Se invece, hai ruotato la tua auto di 45 ° in senso orario, e poi l'hai spinto a 5 m in avanti, avresti mosso 5 m in direzione nord-est. Quindi è necessario fare una delle due cose - (1) resettare (applicare) se possibile la matrice di trasformazione all'oggetto - come si fa nei programmi di creazione di contenuti 3d Blender, Maya, 3dsMax ecc. (2) È necessario calcolare un oggetto ruotato vettore di traduzione. – enhzflep