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

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 pubblicato il nel canale Web
 

Il 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 - info
piefab21 Agosto 2013, 19:32 #1
Tutte cose belle peccato che:
1) browser differenti danno risultati differenti (o non li danno affatto)
2) la maggior parte degli utenti finali ha browser obsoleti tipo IE8
gi_katana22 Agosto 2013, 08:26 #2

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?
_ROBERTO_22 Agosto 2013, 10:00 #3
Vorrei segnalare che la matrice M è di ordine 2x3, non 3x2
frankie22 Agosto 2013, 10:08 #4
Si parla sempre più di standard e di IE10 che finalmente li rispetta e forse meglio degli altri.

Adesso fate articoli specifici su IE10 e feature non standard
frankie22 Agosto 2013, 10:14 #5
E se invece sono feature standard di CSS3, NON scrivete nel titolo "IN IE10" ma "nelle pagine web", "nei browser(s)"

PS appena provato con FF e funziona.
rockroll23 Agosto 2013, 01:19 #6
Originariamente inviato da: gi_katana
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?


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.
Obelix-it25 Agosto 2013, 17:06 #7
Originariamente inviato da: frankie
E se invece sono feature standard di CSS3, NON scrivete nel titolo "IN IE10" ma "nelle pagine web", "nei browser(s)"

Scherzi ?? se scrive cosi', MS mica gli manda il bonifico....
CBR900cc26 Agosto 2013, 00:07 #8
non lo faccio mai, ma questa volta commento anche io, avete rotto con tutte queste lamentele per ogni news che appare, ma prendete la news per quello che è, e cioé informazione! che poi un browser sia meglio di questo di quello o l'altro chissene frega..! sono anni e anni che leggo tutte le news di hwupgrade, e ce ne fosse una senza una polemica....
Leron27 Agosto 2013, 10:55 #9
bell'articolo anche se forse sarebbe più utile evitare di fare la marchetta a microsoft (o quantomeno scrivere "post sponsorizzato" ) e magari scrivere qualche articolo come si deve su funzioni STANDARD soprattutto TESTATE su tutti i browser e non solo su uno io li leggerei molto più volentieri e credo anche molti altri qui sul sito
Obelix-it30 Agosto 2013, 15:27 #10
Originariamente inviato da: CBR900cc
navete rotto con tutte queste lamentele per ogni news che appare

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".

Originariamente inviato da: CBR900cc
ma prendete la news per quello che è, e cioé informazione!

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...

Originariamente inviato da: CBR900cc
che poi un browser sia meglio di questo di quello o l'altro chissene frega..! sono anni e anni che leggo tutte le news di hwupgrade, e ce ne fosse una senza una polemica....

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".

La discussione è consultabile anche qui, sul forum.
 
^