DirectX/Calcolo matriciale: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{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 posi...
 
Nessun oggetto della modifica
Riga 55: Riga 55:
=== Matrice inversa ===
=== Matrice inversa ===
Si definisce matrice inversa di una matrice M, una matrice M<sup>-1</sup> tale che <math>MM^{-1} = I</math>. 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.
Si definisce matrice inversa di una matrice M, una matrice M<sup>-1</sup> tale che <math>MM^{-1} = I</math>. 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:
<source lang="cpp">
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);
</source>
*'''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.


[[Categoria:DirectX|Ripasso di Matematica|Calcolo matriciale]]
[[Categoria:DirectX|Ripasso di Matematica|Calcolo matriciale]]
{{Avanzamento|75%|07 ottobre 2011}}
{{Avanzamento|100%|08 ottobre 2011}}

Versione delle 23:08, 7 ott 2011

Indice del libro

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:

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:

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:
  • 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:

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

Questa operazione gode della proprietà associativa ma non commutativa. Quindi . Ma

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: dove 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à:

Per qualsiasi matrice identità I vale: e

Matrice trasposta

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

Matrice inversa

Si definisce matrice inversa di una matrice M, una matrice M-1 tale che . 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.