DirectX/Calcolo matriciale

Da testwiki.
Versione del 19 apr 2020 alle 06:03 di imported>DannyS712 (Update syntaxhighlight tags - remove use of deprecated <source> tags)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

Template:DirectX Una matrice è una tabella rettangolare di numeri reali. Ogni matrice è composta da m righe e n colonne. Ogni elemento nella matrice occupa una determinata posizione (i,j). Il numero degli elementi della matrice si ottiene moltiplicando m per n. Per trovare un oggetto nella matrice lo identifichiamo con la coppia di coordinate. L'elemento alla posizione (i,j) della matrice M sarà Mi,j, dove i è la riga, e j la colonna.

Ecco alcuni esempi di matrici:

A=[M1,1M1,2M1,3M2,1M2,2M2,3M3,1M3,2M3,3M4,1M4,2M4,3]B=[03.143.5247.501.57.94.4]C=[153.5]D=[153.5]

Mentre A è una matrice generica, B è una matrice speciale e viene detta quadrata, ossia quando m = n. Anche C e D hanno particolarità: per C, m = 1, e viene detto vettore (o matrice) riga, D invece ha n = 1 ed è detto vettore/matrice colonna.

Operazioni tra matrici

Le operazioni tra matrici sono molto simili a quelle tra vettori:

  • Uguaglianza: due matrici sono uguali se per ogni elemento (i,j) della prima matrice, l'elemento (i,j) della seconda matrice ha lo stesso valore:

xi,jM, M=NMi,j=Ni,j

L'uguaglianza può essere verificata solo per due matrici con lo stesso numero di righe e colonne.

  • Somma: la somma si esegue elemento per elemento. Può essere calcolata solo per matrici con lo stesso numero di righe e colonne. Il risultato della somma tra due matrici è quindi una terza matrice in cui ogni elemento è la somma degli elementi nella stessa posizione delle matrici originarie:
[13.42.23]+[4.51.23.135.78]=[1+4.53.4+1.22.2+3.133+5.78]=[5.54.65.338.78]
  • Prodotto per scalare': come per i vettori, il prodotto tra una matrice ed uno scalare è una matrice in cui tutti gli elementi sono stati moltiplicati per lo scalare.
  • Sottrazione: come per i vettori, viene definita in termini di addizione e prodotto per scalare. In particolare date M ed N matrici, M - N = M + (-1N).

Prodotto tra matrici

Questa operazione non ha simili tra i vettori ed è molto complessa. Può essere eseguita solo se il numero di colonne della prima matrice è uguale a quello delle righe della seconda. Date due matrici M ed N, il loro prodotto sarà una terza matrice in cui ogni elemento (i, j) è il prodotto scalare (vedi i vettori) tra il vettore riga i della matrice M ed il vettore colonna j della seconda matrice. Esempio:

A=[233142]B=[152314205]

Il prodotto AB è definito dato che A ha un numero di colonne pari al numero di righe di B. Si calcola in questo modo:

AB=[(2,3,3)(1,3,2)(2,3,3)(5,1,0)(2,3,3)(2,4,5)(1,4,2)(1,3,2)(1,4,2)(5,1,0)(1,4,2)(2,4,5)]=[2*1+3*3+3*22*5+3*1+3*02*2+3*4+3*51*1+4*3+2*21*5+4*1+2*01*2+4*4+2*5]=[131311714]

Questa operazione gode della proprietà associativa ma non commutativa. Quindi (AB)C=A(BC). Ma ABBA

Prodotto tra vettore e matrice

Il prodotto tra vettore e matrice è possibile solo quando il numero di elementi nel vettore è uguale al numero di righe della matrice. Il prodotto tra vettore e matrice è un vettore di tanti elementi quanti nel primo vettore. Dato un vettore di n elementi, il vettore risultante sarà la somma di n vettori tali che: il primo vettore è il prodotto tra il valore scalare alla posizione 1 del vettore ed il vettore riga n. 1 della matrice, il secondo è il prodotto tra l'elemento del vettore alla posizione 2 e il vettore riga n. 2 della matrice. In altre parole: vm=v1m1,+v2m2,++vnmn, dove mn, indica il vettore riga numero n.

Matrici particolari

Matrice identità

La matrice identità è la matrice che moltiplicata per qualsiasi altra matrice (dove la moltiplicazione è applicabile) la lascia inalterata. La matrice identità è sempre quadrata ed è composta da tutti zeri tranne la diagonale che va da (0, 0) a (n, n), dove n è il numero di righe e colonne della matrice stessa, che sarà invece riempita di 1. Sono matrici identità:

[1001][100010001][1000010000100001]

Per qualsiasi matrice identità I vale: AI=A e IA=A

Matrice trasposta

La trasposta di una data matrice è una seconda matrice dove sono invertite colonne e righe:

A=[A1,1A1,2A1,3A2,1A2,2A2,3]AT=[A1,1A2,1A1,2A2,2A1,3A2,3]

Matrice inversa

Si definisce matrice inversa di una matrice M, una matrice M-1 tale che MM1=I. Il calcolo della matrice inversa non è semplice e per quanto ci serve nemmeno utile. Esiste comunque una funzione di D3DX che ci permette di calcolare la matrice inversa di una data matrice.

DirectX e le Matrici =

Una matrice in DirectX si può definire come di tipo D3DXMATRIX. In DirectX tutte le matrici sono sempre quadrate di lato 4. In altre parole ogni D3DXMATRIX ha sempre 4 righe e 4 colonne. La classe D3DXMATRIX è molto completa e fornisce operatori di uguaglianza, somma sottrazione, moltiplicazione per costante e per altra matrice. Ci sono inoltre 4 funzioni che svolgono altri compiti:

D3DXMATRIX *D3DXMatrixIdentity(D3DXMATRIX *pOut);
D3DXMATRIX *D3DXMatrixTranspose(D3DXMATRIX *pOut, D3DXMATRIX *pM);
D3DXMATRIX *D3DXMatrixInverse(D3DXMATRIX *pOut, float *pDeterminant, D3DXMATRIX *pM);
D3DXVECTOR4 *D3DXVec4Transform(D3DXVECTOR4 *pOut, D3DXVECTOR4 *pV, D3DXMATRIX *pM);
  • D3DXMatrixIdentity prende un puntatore a matrice come argomento e trasforma quella matrice nella matrice identità.
  • D3DXMatrixTranspose genera la matrice trasposta di una data matrice M. Come primo parametro vuole il puntatore alla matrice dove verrà messo il risultato e come secondo, la matrice originale.
  • D3DXMatrixInverse genera la matrice inversa di una data matrice M. Funziona come Transpose.
  • D3DXVec4Transfor moltiplica un vettore per una matrice ottenendo un nuovo vettore. Come argomenti vuole il puntatore al vettore risultato, il vettore da moltiplicare e la matrice da moltiplicare.

Terminato il modulo sulle matrici non posso che suggerire di allenarsi su fogli di carta o scrivere piccoli programmi per fissare questi concetti fondamentali per la computer graphics. Template:Avanzamento