2010-04-23 5 views
9

Qualcuno può consigliare alcuni buoni punti di partenza per la comprensione delle Matrici di Trasformazione per manichini come me con scarse abilità matematiche.Qualcuno può consigliare alcuni tutorial di Matrix di trasformazione per i manichini?

Sono disposto a imparare la matematica, e non sono un completo idiota (spero) ma gli esempi che sto trovando sembrano richiedere un enorme salto da quello che so, a ciò che ho bisogno di sapere.

+0

Con prospettiva dell'applicazione? Hai creato un'applicazione? – Guru

+0

Sto provando a cogliere le trasformazioni di CSS3 e webkits matrix3d. http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariCSSRef/Articles/Functions.html – gargantuan

risposta

18

Ho scritto un programma Web che può essere utilizzato per giocare con le matrici di trasformazione. Permette tipi preimpostati e personalizzati.

screenshot of transformation matrix program

Play with it online o grab the source.

Dovrebbe essere facile giocare con i numeri e vedere immediatamente come influenza il disegno della casa. Guarda il codice disponibile online per determinare cosa sta facendo e dovresti essere in grado di capire cosa sta succedendo.

Se hai problemi, rendersi conto che la matrice 3 × 3 viene semplicemente moltiplicato per ogni vertice (X & coordinata Y) a forma casa. La moltiplicazione di matrici con il vertice (faremo ora riferimento ad esso come un vettore) e una trasformazione di matrice sembra così ...

1 0 0 1 
0 1 0 * 2 
0 0 1 0 

Sulla sinistra è un identity matrix (una matrice idempotente che non influisce il vettore) e un vettore di 1, 2, 0 (supponiamo che questo mappa per posizionare X1 e Y2 nel programma menzionato sopra il grafico e ignorare l'ultimo 0).

Matrix multiplication possono essere visualizzati in questo modo ...

a b c x a * x + b * y + c * z 
d e f + y = d * x + e * y + f * z 
g h i z g * x + h * y + i * z 

Quindi, nel nostro esempio, che sarebbe ...

1 0 0 1 1 * 1 + 0 * 2 + 0 * 0 
0 1 0 * 2 = 0 * 1 + 1 * 2 + 0 * 0 
0 0 1 0 0 * 1 + 0 * 2 + 1 * 0 

fare che la matematica e otteniamo il vettore finale .. .

1 
2 
0 

Dato che abbiamo detto la nostra matrice identità non dovrebbe modificare i valori, possiamo vedere sopra che t il cappello è il caso in quanto il vettore risultante corrisponde all'originale.

Per spiegare ulteriormente, considerare quando è necessario tradurre il vettore. Diciamo che vogliamo tradurre la casa per 5 pixel lungo l'asse X. Vogliamo iniziare con la matrice identità, ma modificare il numero in alto a destra su 5 e creare la dimensione aggiuntiva nel vettore 1 (vedrete perché brevemente).

1 0 5 1 1 * 1 + 0 * 2 + 5 * 1 
0 1 0 * 2 = 0 * 1 + 1 * 2 + 0 * 1 
0 0 1 1 0 * 1 + 0 * 2 + 1 * 1 

facciamo la matematica ancora una volta ...

6 
2 
1 

Possiamo vedere che il primo numero (X nelle nostre coordinate) è stata tradotta lungo l'asse X di 5. Provalo nel programma collegato sopra.

Il motivo per cui abbiamo creato il terzo valore 1 è così quando è stata eseguita la matematica, è stata considerata la traduzione. Se fosse stato 0, verrà ignorato, poiché qualsiasi numero moltiplicato per 0 risulta in 0.

Se hai ancora problemi, guarda i video online (this one, ad esempio) che possono aiutarti a spiegarlo in modo più visivo.

Ricorda: praticamente chiunque può guidare un'auto, e praticamente chiunque può imparare questo, nonostante una scarsa comprensione della matematica da parte di sé stessi. Continuate a farlo: la persistenza è la chiave. In bocca al lupo.

+1

questo è stato fantastico – Rasmus

+1

Questa risposta merita più voti considerando la quantità di visualizzazioni che questa domanda ha avuto. – gargantuan

6

Una trasformazione non è altro che una matrice che moltiplica un vettore per produrre il vettore trasformato, quindi se non si capisce la moltiplicazione e l'aggiunta della matrice non si può andare molto lontano.

Inizia con matrici e algebra lineare. Ci sono molti libri là fuori, ma renditi conto che sulla base della dichiarazione che ho fatto sopra non hai bisogno di leggere tutto il libro. Non avrai bisogno di autovalori o eliminazione gaussiana o spazi vettoriali o di qualsiasi altra roba che sarà avanzata e difficile.

Hai solo bisogno di sapere come estendere ciò che sai sulla moltiplicazione e l'aggiunta di numeri alle matrici.

Ottenere le voci in quella matrice di trasformazione è un'altra cosa. Avrai bisogno di un buon libro su matematica e computer grafica. Non lo troverai in un libro di testo di algebra lineare.

8

Come ha notato duffymo, Matrix Transformations non è altro che (pre) moltiplicare un vettore (come un punto 3d) da una matrice. Tuttavia, questa è pura matematica e difficile da visualizzare per alcune persone.

Il modo migliore per capire matrici di trasformazione (almeno per me) è quello di ottenere un codice di esempio , farlo esecuzione, e giocare con i numeri. Prova a vedere se è possibile posizionare un oggetto più lontano o ruotato di 45 gradi. Prova a mettere le trasformazioni in nell'ordine diverso e vedi quali sono i risultati.

Tutto funziona? Buona.

volta che si ottiene una sensazione di che, e se siete abbastanza coraggiosi per affrontare la matematica, si potrebbe prendere questi passaggi:

In primo luogo, capire come il lavoro moltiplicazione di matrici. Alcuni link:

Una volta che hai dimestichezza con la moltiplicazione di una matrice a mano, avrai la sensazione che le trasformazioni siano scritte in questo modo. Mentre li usi, la comprensione delle matrici verrà alla fine da te.

In secondo luogo, mi raccomando sempre trascorrere un pomeriggio cercando di implementare il proprio Matrix classe e definire alcune operazioni comuni, come mul(Vector v), transpose() o addirittura createTranslationMatrix(float x, float y, float z). Metti qualche prova e vedi se i risultati sono uguali a quello che hai fatto a mano.

Se sei arrivato così lontano, prova ad implementare la tua Trasformazione prospettica! È la cosa più straordinaria che non siamo mai riusciti ad apprezzare. Una spiegazione utile qui:

sarete molto orgogliosi di voi stessi una volta che avete compiuto uno dei più labourous, ma i compiti di attuazione di un oggetto Matrix sotto-apprezzato. In bocca al lupo!