lunedì 28 aprile 2014

Matrici di trasformazione 2 - Affinità


Matrice di trasformazione

Riprendiamo la formula delle trasformazioni lineari vista nel post precedente:

Dati i due versori fondamentali
e1 = [1 0] ed e2 = [0 1]
ciascun vettore a due componenti si può scrivere come combinazione lineare di questi che sono una base dello spazio a due dimensioni.
Quindi, anche nel caso dei punti associati, se consideriamo:
A = (2, 3) B = (-1, 2) C = (4, -1)
I vettori possono essere scritti nella forma:
a = [2 3] = 2 e1 + 3 e2 = 2*[1 0]+ 3*[0 1]
b = [-1 2] = - e1 + 2 e2 = -1*[1 0]+ 2*[0 1]
c = [4 -1] = 4 e1 - e2 = 4*[1 0]+ -1*[0 1]


Eseguiamo le trasformazioni di e1 ed e2 :
si può notare che questi vengono trasformati rispettivamente nella prima e nella seconda riga della matrice di trasformazione.
Questa proprietà ci aiuta a determinare con facilità la matrice di trasformazione.

Dato il punto P = (3, 1) ed il suo vettore associato p = [3 1]
Consideriamo la trasformazione:
dove p viene trasformato in p' = [5 6]
Si può notare che i versori fondamentali vengono trasformati in:
e1 = [1 0] viene trasformato in: e'1 = [2 1]
e2 = [0 1] viene trasformato in: e'2 = [-1 3]

Il vettore p si ottiene come combinazione lineare di di e1 ed e2
p = [3 1] = 3e1 + e2

ed il vettore p' si ottiene come combinazione lineare di e'1 ed e'2
p' = 3 e'1 + e'2 = 3 [2 1] + [-1 3] = [6 3] + [-1 3] = [5 6]

Il vettore P' quindi è la combinazione lineare secondo gli stessi coefficienti dei vettori che corrispondono ai versori fondamentali come si può vedere nella figura sottostante.
Per p si prende come riferimento la griglia cartesiana nera e per p' la griglia affine rossa.

Utilizzando la proprietà esposta diventa facile individuare le matrici di trasformazione di alcune trasformazioni particolari.

Nello stiramento di rapporto h nella direzione dell'asse delle x il vettore e1 = [1 0] va trasformato in e'1 = [h 0] mentre e2 deve restare invariato quindi la matrice di trasformazione sarà Stx.
Nello stiramento di rapporto k nella direzione dell'asse delle y il vettore e2 = [0 1] va trasformato in e'2 = [0 k] mentre e1 deve restare invariato quindi la matrice di trasformazione sarà Sty.
Se h = k abbiamo lo stesso rapporto di stiramento nelle due direzioni quindi si tratta di una omotetia con la matrice di trasformazione Om.


Stiramenti con GeoGebra

Costruiamo un'applet GeoGebra per fare stiramenti di figure

La matrice T è costruita utilizzando i valori nell'area gialla del foglio di calcolo che vengono usati per definire i vertici del triangolo.
La matrice T' viene costruita moltiplicando T per la matrice di trasformazione ed usata per costruire il triangolo trasformato.
La scelta della trasformazione viene fatta mediante tre caselle di controllo selezionabili una sola alla volta. Ad ogni selezione viene mostrato uno slider che serve per impostare il valore numerico del rapporto di stiramento.
La scelta esclusiva sulle tre variabili logiche (e, f, g), lo slider che va mostrato e l'operazione che va eseguita sono controllate mediante comandi GeoGebraScript che mostriamo di seguitoper la variabile logica e che controlla lo stiramento orizzontale.

e = true la variabile cliccata viene impostata a Vero
f = false
g = false
h = 1 Viene assegnato il rapporto di stiramento orizzontale
ImpVisibileInVista[h, 1, true ] viene mostrato lo slider h
ImpVisibileInVista[k, 1, false ]
ImpVisibileInVista[t, 1, false ]
T' = T*Stx viene eseguita la trasformazione

In modo analogo si procede per la variabile f che controlla los tiramento vertoicale e la g che controlla l'omotetia.
Chi vuole scaricare l'applet può trovarla all'indirizzo:



Matrice di rotazione

Con la stessa regola, tenendo presente che i punti A e B devono essere ruotati di un angolo α si possono facilmente trovare i punti A' e B' e di conseguenza la matrice R di rotazione.

La trasformazione in forma matriciale diventa:

La regola del prodotto righe per colonne tra le matrici ci permette di scrivere anche la forma cartesiana che non è facile da ricordare.

La realizzazione del file GeoGebra che esegue una rotazione rispetto allorigine degli assi non presenta difficoltà rispetto a quanto già visto, basta definire uno slider nella variabile alfa ed inserire le formule opportune nella matrice R.

Contenuto cella B1: cos(alfa) contenuto cella C1: sin(alfa)
Contenuto cella B2: -sin(alfa) contenuto cella C2: cos(alfa)

Come visto nel post sulle isometrie si possono fare prodotti di trasformazioni eseguendo il prodotto delle matrici di trasformazione e si possono fare anche le trasformazioni inverse, che riportano il punto nella sua posizione iniziale moltiplicando per le matrici inverse.


Traslazione

La traslazione di un punto nel piano cartesiano si realizza sommando alle sue coordinate un vettore traslazione. Le due forme cartesiana e matriciale sono:

Rispetto alle trasformazioni viste finora ci sono due novità:
# - Non si tratta più di un prodotto tra un vettore ed una matrice di trasformazione ma di una somma di vettori per cui, se i deve traslare un triangolo occorre sommare la matrice 3x2 con un'altra matrice 3x2. Non c'è più una matrice sola che trasforma figura di un numero di vertici diverso.
# - Nel caso delle trasformazioni composte la diversa combinazione tra somme e prodotti crea problemi di non facile soluzione.

Per costruire una applet che esegue una traslazione possiamo predisporre nel foglio di calcolo due aree di input: una per il triangolo ed una per il vettore di traslazione.
Definiamo una lista: Vt = {B1, C1}
Con questo vettore costruiamo la matrice di traslazione Mt = {Vt, Vt, Vt}
La lista Vt ha come elementi le componenti del vettore di traslazione e la matrice Mt è costruita come lista di liste, in tal modo non è difficile modificare l'applet in modo che venga trasformato un quadrilatero o una figura qualsiasi.

Utilizzando la matrice T' si definisce nel solito modo il poligono per la rappresentazione sul piano del triangolo trasformato.

Queste formule permettono di fare qualsiasi trasformazione affine ma non si prestano per uno studio delle trasformazioni composte per cui rimandiamo tale studio ad uno dei prossimi post in cui predisporremo delle applet con formule più adatte.

mercoledì 16 aprile 2014

Matrici di trasformazione 1 - Gruppo di Isometrie

Trasformazioni elementari del piano

In generale si parla di Trasformazione del piano in sé quando viene stabilita una corrispondenza tra punti del piano stesso mediante una relazione che fa corrispondere ad ogni punto P (x, y) del piano uno ed un solo punto P' (x', y').
GeoGebra ha dei comodi strumenti per fare le principali trasformazioni del piano, noi qui ci occupiamo di alcune semplici isometrie sul piano cartesiano dal punto di vista analitico.
Le trasformazioni, che dovrebbero essere già note allo studente, possono essere fatte sul piano cartesiano usando alcune semplici formule:


Formule generali

Le formule quindi sono casi particolari di una trasformazione lineare del tipo:

Che può essere scritta in forma matriciale considerando i punti come vettori colonna nella forma:

Oppure, considerando i punti come vettori riga nella forma:

Considerando i vettori colonna x si può scrivere: x' = M * x oppure x'T = xT * MT
dove M prende il nome di Matrice di Trasformazione.

Le due forme sono equivalenti, di seguito useremo la seconda che ci sembra più comoda per il trattamento dei dati con GeoGebra.
Aggiungiamo la trasformazione identica che fa corrispondere un punto a se stesso e scriviamo di seguito le matrici di trasformazione:


Trasformazione di un punto

Vogliamo costruire una applet che esegua la simmetria di un punto rispetto all'origine.
La costruzione può sembrare macchinosa, sarebbero più comode le formule cartesiane presentate all'inizio, ma viene fatta in modo da permettere gli sviluppi futuri.
Per la trasformazione dobbiamo eseguire prodotti righe per colonne tra matrici e quindi va definita una matrice di una riga e due colonne con le coordinate del punto da trasformare:
Lp = {{3, 2}}
Definiamo la matrice di trasformazione per eseguire la simmetria rispetto all'origine:
So = {{-1, 0}, {0, -1}}


Usando il simbolo di prodotto tra due matrici viene eseguito da GeoGebra come prodotto righe per colonne:
Lp' = Lp * So
Per la rappresentazione dei punti bisogna usare gli elementi delle matrici per definire, con la giusta sintassi i relativi oggetti.
Si usa il comando: Elemento[ <Matrice>, <Riga>, <Colonna> ].
Nel nostro caso:
P = (Elemento[Lp, 1, 1], Elemento[Lp, 1, 2])
P' = (Elemento[Lp', 1, 1], Elemento[Lp', 1, 2])


Trasformazione di un segmento

Basta trasformare gli estremi del segmento e questi possono essere gli elementi di un'unica matrice Ls in cui nella prima colonna abbiamo le scisse e nella seconda le ordinate.


In questo caso facciamo la simmetria rispetto all'asse x moltiplicando per la matrice di trasformazione Sx ed otteniamo la matrice trasformata:
Ls' = Ls * Sx
Costruiamo come nel caso precedente costruiamo i punti A e B ed i trasformati A' e B'
A = (Elemento[Ls, 1, 1], Elemento[Ls, 1, 2])
B = (Elemento[Ls, 2, 1], Elemento[Ls, 2, 2])
A' = (Elemento[Ls', 1, 1], Elemento[Ls', 1, 2])
B' = (Elemento[Ls', 2, 1], Elemento[Ls', 2, 2])

poi definiamo i segmenti che li uniscono:
s = Segmento[A, B] s' = Segmento[A', B']


Trasformazione di un triangolo

Facciamo un ulteriore passo verso la realizzazione di una applet con cui poter fare alcuni ragionamenti più generali.
Per la costruzione delle matrici usiamo le possibilità offerte dal foglio di calcolo: scriviamo la matrice dei vertici del triangolo in una zona del foglio che è stata colorata di giallo per mettere in evidenza i dati iniziali, quelli per intenderci che possono essere modificati in modo da poter modificare la forma del triangolo.
In questo caso vogliamo fare la rotazione di 90° e quindi scriviamo in un'altra zona del foglio la matrice opportuna.
Dopo che si sono inseriti i dati nel foglio si seleziona la zona interessata si clicca con il pulsante destro del mouse e si seleziona la voce Crea/Matrice poi si rinomina la matrice stessa per assegnare l'etichetta voluta.
Creiamo una lista con i vertici del triangolo:
Tri = {(Elemento[T, 1, 1], Elemento[T, 1, 2]), (Elemento[T, 2, 1], Elemento[T, 2, 2]),
(Elemento[T, 3, 1], Elemento[T, 3, 2])}
Creiamo il triangolo
F = Poligono[Tri]
Ed eseguiamo il prodotto tra le matrici per costruire la matrice del triangolo trasformato
T' = T * Ro90
Poi procediamo con lo stesso metodo visto a costruire la lista Tri' dei vertici ed il triangolo F' in modo da rappresentare il triangolo trasformato.


Una piccola raffinatezza può essere quella di usare una Formula Latex per rappresentare le matrici coinvolte nel prodotto.
In questo modo si può avere l'esatta percezione delle formule e dei numeri usati per eseguire la trasformazione con una matrice.


Una Applet che esegue le diverse trasformazioni

Per prima cosa inseriamo nel foglio elettronico tutte le matrici di trasformazione ed il triangolo da trasformare. Con il comando Crea/Matrice descritto sopra si creano tutte le matrici di trasformazione, operazione necessaria perchè di queste matrici si dovranno fare i prodotti righe per colonne che sono eseguiti da GeoGebra solo sugli oggetti matrice.
Poi dichiariamo 8 variabili logiche e1, e2, … , e8 una per ogni trasformazione da eseguire, la numerazione assegnata alle variabili segue lo stesso ordine delle matrici inserite nel foglio e quello delle caselle di controllo.
Il procedimento usato è quello descritto sopra per il triangolo, in questo caso bisogna fare in modo che venga mostrata una trasformazione per volta. Il procedimento classico usato con GeoGebra è quello di fare tutte le trasformazioni e poi mostrarne una sola, in questo caso 8 trasformazioni ed 8 formule Latex.
Scegliamo di usare le possibilità offerte da GeoGebraScript per fare solo la trasformazione richiesta. Per prima cosa si deve fare in modo che una scelta escluda le altre e questo si ottiene associando ad ogni variabile logica una serie di comandi di scripting che assegnino il valore vero alla sola variabile cliccata e il valore falso a tutte le alte.
Supponiamo di cliccare la seconda casella relativa alla simmetria rispetto all'origine, per fare questo i comandi sono:
ImpValore[e1,false] ImpValore[e2,true] ImpValore[e3,false]
ImpValore[e4,false] ImpValore[e5,false] ImpValore[e6,false]
ImpValore[e7,false] ImpValore[e8,false]
Se si sceglie la sesta casella relativa alla simmetria rispetto alla bisettrice del secondo e quarto quadrante i comandi sono:
ImpValore[e1,false] ImpValore[e2,false] ImpValore[e3,false]
ImpValore[e4,false] ImpValore[e5,false] ImpValore[e6,true]
ImpValore[e7,false] ImpValore[e8,false]


A questi comandi vanno aggiunti il comando per eseguire la trasformazione scelta ed un'altra assegnazione di cui vedremo in seguito l'utilità
Analizziamo i comandi associati alla variabile e8 per eseguire la rotazione di 270°
ImpValore[e1,false] ImpValore[e2,false] ImpValore[e3,false]
ImpValore[e4,false] ImpValore[e5,false] ImpValore[e6,false]
ImpValore[e7,false] ImpValore[e8,true]
T'=T*Ro270
M=Ro270
Dopo che si è imposto che solo la variabile in questione deve essere vera, si esegue il prodotto tra le due matrici per fare la trasformazione.
Viene fatto il solo prodotto che interessa e vengono rappresentati solo i triangoli T e T'.
La matrice di trasformazione viene assegnata ad una matrice M che verrà usata per scrivere la formula Latex, infatti questa formula va scritta usando la giusta matrice di trasformazione che di volta in volta viene copiata in M.
Nessuna diversità nella rappresentazione dei triangoli rispetto a quanto visto nell'esempio precedente, con questo procedimento basta rappresentare T' che di volta in volta contiene la matrice di trasformazione scelta ed anche gli oggetti usati per la formula Latex sono sempre gli stessi.

Prodotto di due trasformazioni

Se si vuole eseguire una rotazione di 90° e di seguito simmetria rispetto all'asse x basta usare la formula: T' = T * Ro90 * Sx
Nel nostro caso viene fatta l'operazione che può essere chiamata prodotto delle due trasformazioni:


Ricordiamo che il prodotto di matrici gode della proprietà associativa per cui è irrilevante l'ordine seguito nel prodotto ma non della proprietà commutativa per cui scambiando l'ordine delle operazioni in alcuni casi si ottengono risultati diversi.

Costruiamo ora una applet che faccia tutte le trasformazioni composte.


Si devono definire altre 8 variabili logiche per il prodotto di matrici da fare su F' per eseguire la seconda trasformazione, anche queste vanno gestite in modo che una sola possa essere vera.
Si esegue il prodotto di T' per la matrice della seconda trasformazione.
Nel caso mostrato: T'' = T' * So N = So
La matrice N viene usata per la costruzione della formula Latex, poi si esegue il prodotto:
MN = M * N
per poter costruire la formula Latex sottostante utilizzando gli elementi della matrice MN.

Gruppo di trasformazioni

Consideriamo ora l'insieme delle 8 trasformazioni viste ed eseguiamo tutti i possibili prodotti, si può costruire una tabella che possiamo usare per studiarne le proprietà.
La tabella indica i prodotti delle matrici considerando come primo fattore le matrici elencate a sinistra e come secondo quelle elencate nella riga in alto.
1 – Si tratta di una operazione interna infatti ad ogni prodotto si ottiene sempre una delle trasformazioni dell'insieme stesso
2 - La trasformazione identica è l'elemento neutro
3 – Ogni elemento ha un inverso che moltiplicato per l'elemento stesso dà come risultato l'elemento neutro
La tabella non ci permette di vedere in modo immediato la proprietà associativa che comunque per le matrici quadrate con determinante diverso da zero è verificata.
Si può vedere che non è verificata la proprietà commutativa, infatti la tabella dei prodotti non è simmetrica rispetto alla diagonale principale.
L'insieme delle trasformazioni rispetto all'operazione di prodotto quindi è un Gruppo non abeliano.

Il gruppo è abeliano se si considerano solo le prime quattro trasformazioni: I, So, Sx, Sy.
La maggior parte di elementi moltiplicati per se stessi danno come prodotto l'identità quindi sono inversi di se stessi, Ro90 e Ro270 sono nilpotenti infatti (Ro90)4 = I.
Invitiamo a scoprire altre proprietà dei questo gruppo o dei suoi elementi.