Un po’ di matematica: Trasformazioni CSS in Internet Explorer 10

La proprietà transform offre alcune facili funzioni per traslare, ruotare, scalare e piegare un blocco, e, inoltre, consente anche di specificare la matrice di trasformazione grezza.
di Antonio Barba pubblicato il 21 Agosto 2013 nel canale WebIl potere di transform
La proprietà transform, che abbiamo già osservato in un precedente articolo, ci offre delle comode funzioni per traslare, ruotare, scalare e piegare un blocco e, inoltre, consente anche di specificare la matrice di trasformazione grezza.
div { transform: translate(30px, 40px) rotate(7deg); } |
Da un punto di vista algoritmico, le funzioni translate() e rotate() sono delle funzioni di utilità che prendono in input i parametri, rispettivamente, in pixel e in gradi e creano una opportuna matrice di trasformazione da moltiplicare alle coordinate dei punti di quel blocco.
Fig. 1 Esempio di rotazione
http://www.w3schools.com/cssref/trycss3_transform_inuse.htm
Matematicamente, le operazioni tra matrici sono una versione “condensata” delle operazioni tra sistemi di equazioni lineari. Nel nostro caso, abbiamo 2 equazioni per le due coordinate X e Y, che rappresentiamo in questo modo:
I termini A(1,1), A(1,2), ecc… sono i “coefficienti” del sistema, e possono essere rappresentati in forma compatta come la seguente matrice M di dimensioni 3x2:
In algebra, questo nuovo oggetto M può essere manipolato con delle operazioni di somma commutativa e moltiplicazione non commutativa (invertendo l’ordine degli operandi si ottengono due risultati diversi), ed il risultato di queste operazioni è nuovamente una matrice. Nel caso estremo, si può pensare al singolo numero reale come una matrice di dimensioni 1x1.
Non ci addentreremo nei dettagli della teoria, che richiederebbe un intero libro, ma basti pensare che usando questa notazione è possibile esprimere con formule molto semplici qualsiasi tipo di “applicazione lineare”, ossia tutte quelle funzioni che trasformano un oggetto da uno spazio all’altro. Nel nostro caso abbiamo a che fare con lo spazio dell’oggetto “prima” della trasformazione e quello “dopo” la trasformazione.
L’oggetto in sè rimane immutato da un punto di vista matematico, ma cambiano le sue coordinate nello spazio dell’osservatore, cioè la pagina HTML che l’utente visualizza sul browser. Ad esempio, la funzione rotate(alpha), dove “alpha” è un angolo espresso in gradi, verrà trasformato nella corrispondente matrice di rotazione:
Questa matrice verrà poi “concatenata”, cioè moltiplicata a destra, alla matrice corrente di quel blocco. L’algoritmo di disegno userà poi questi coefficienti per risolvere il sistema di coordinate del blocco, e trovare quindi le coordinate corrette di ciascun pixel. Questo compito, computazionalmente molto oneroso, viene delegato da Internet Explorer 10 alla GPU che possiede centinaia di unità dedite al calcolo delle funzioni trigonometriche (seno, coseno, tangente e funzioni inverse) e unità vettoriali specializzate nella moltiplicazione e somma di matrici.
I calcoli necessari per le trasformazioni 2D, infatti, sono esattamente gli stessi che vengono impiegati anche nella grafica poligonale 3D, con l’unica differenza che aggiungendo la coordinata Z, le matrici avranno dimensione 4x3 (in realtà si aggiunge un’ulteriore riga per normalizzare lo spazio con la coordinata fittizia W, arrivando così a matrici 4x4). Quindi cambia solo il numero dei coefficienti (e di conseguenza il “peso” del calcolo), ma gli algoritmi e le formule matematiche sono gli stessi. Volendo calcolare a mano i coefficienti della matrice, è possibile specificarli in questo modo:
div { transform: matrix(0.866,0.5,-0.5,0.866,0,0); } |
I valori 0.866 e 0.5 sono, rispettivamente, il coseno ed il seno dell’angolo di 30°, per cui l’oggetto subirà una rotazione intorno al proprio centro di questa quantità. E’ possibile sperimentare il metodo delle matrici usando questa pagina di esempio, e facendo sempre riferimento alla documentazione fornita a corredo di Internet Explorer 10 e del consorzio W3C.
10 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info1) browser differenti danno risultati differenti (o non li danno affatto)
2) la maggior parte degli utenti finali ha browser obsoleti tipo IE8
lascia il tempo che trova
Bello né... ma...penso che neanche nella migliore delle ipotesi, ovvero nel caso in cui TUTTI i browser (inclusi quelli per mobile) fossero al 100% conformi a queste specifiche, l'utilizzo di queste tecniche portino del valore aggiunto... bello si... un div inclinato o ruotato.. e poi?
Adesso fate articoli specifici su IE10 e feature non standard
PS appena provato con FF e funziona.
penso che neanche nella migliore delle ipotesi, ovvero nel caso in cui TUTTI i browser (inclusi quelli per mobile) fossero al 100% conformi a queste specifiche, l'utilizzo di queste tecniche portino del valore aggiunto... bello si... un div inclinato o ruotato.. e poi?
Invece io penso che pretendere valori aggiunti come pappa già pronta sia uno dei mali cui ci ha portato l'esasperazione di funzioni di utilità che dovrebbero permettere a cani ed altri animali meno nobili di realizzare cose assolutamente al di sopra della loro portata intellettiva e cognitiva. . .
Il risultato è che al giorno d'oggi ben pochi sanno ancora usare la materia grigia. Non pretendo che certe funzioni sia ancora necessario costruirsele da se, come doveva fare il sottoscritto 30 o 40 anni or sono, ma sapersi costruire all'occorrenza questo, e ben altro che questo, magari partendo da zero, si che lo pretenderei, se non vogliamo cadere nell'oscurantismo, demandando solo a pochi nell'assurdo chiuso delle industrie di essere depositari di questi "arcani".
Le trasformazioni geometriche sono quanto di più semplice possa esistere in ambito matematico (per quanto l'ermetismo dell'articolo le faccia cadere dall'alto...), ma vorrei vedere quanti hanno capito tutto leggendoo, e sopratutto quanti sarebbero in grado di costruirsi un routine generalizzata di trasformazione, anche avendo a disposizione le semplicissime formule di cui sopra, che già costituiscono almeno mezza pappa pronta.
Scherzi ?? se scrive cosi', MS mica gli manda il bonifico....
Francamente: se voglio sentire le marchette pro-Microsoft, vado su un sito MS, non su uno che si spaccia per generico e/o che non mette almeno un disclaimer "tlin-tlon: informazione pubblicitaria".
casomai, disinformazione, quando dal titolo in giu 'spacci' una ficiur standard del W3C come 'caratteristica' di (stranamente...) un certo browser di (guarda tu il caso di nuovo...) un'azienda nota per pagare per far scrivere (bene, possibilmente) di se.
Bastava solo che il titolo fosse "Un po’ di matematica: Trasformazioni CSS" senza riferimento esplicito a *nessun foxxuto browser, visto che, appunto, si tratta di una funzione 'trasversale'.
Nota, indeed, che non e' affatto l'unico articolo espressamente per IE10...
Bastava mettere un disclaimer "Articolo sponsorizzato" (come nella pubblicita') e passava la paura....
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".