Domanda

Voglio fare un po di disegno 2D e, quindi, di voler attuare alcune trasformazioni di matrice.Con la mia luce matematica sfondo sto cercando di capire come farlo in C# (di qualsiasi altro linguaggio orientato agli oggetti vorresti farlo ovviamente).

Tutti ho letto sta spiegando che abbiamo bisogno di lavorare con matrici 3x3 per essere in grado di far fronte con le traduzioni.Perché non si può fare la traduzione con le moltiplicazioni.Ma questa è moltiplicazioni di matrici che creiamo le nostre trasformazioni.Noi lavoriamo con qualcosa di simile:

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }

Capisco che la media della terza colonna, ma perché abbiamo bisogno di una terza fila?In una matrice di identità, come pure in una rotazione, scala o rotazione l'ultima riga è la stessa.Ci sono operazioni che ho fatto non raggiungere la sicurezza che serve?È perché alcuni linguaggi (Java) si comporta meglio con "quadrato delle dimensioni di matrici?Se è così ho la possibilità di usare 3 colonne e 2 righe in C# (dal matrici di matrici funziona altrettanto bene o meglio).

Per esempio, per una rotazione + traduzione ho una matrice come questo

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }

Nessun bisogno dell'ultima riga.

È stato utile?

Soluzione

questo è con la moltiplicazione di matrici che siamo noi a creare la nostra trasformazioni

Questo è per questo che vogliamo matrici quadrate.

Supponiamo che abbiamo fatto ciò che si propone, e utilizzato 2x3 matrici per le nostre trasformazioni.

Quindi una rotazione sarebbe

( x1, x2, 0 )
( y1, y2, 0 )

e una traduzione sarebbe

( 1, 0, tx )
( 0, 1, ty )

e abbiamo potuto eseguire rotazioni o le traduzioni moltiplicando la nostra matrice per un vettore colonna che rappresenta il punto:

    ( x )
M   ( y )
    ( 0 )

per ottenere le risposte corrette.

Tuttavia - come possiamo affrontare la composizione trasformazioni?Infatti, per "per una rotazione + traduzione ho una matrice di questo tipo" esempio, come hai arrivare a che matrix?Certo, in questo caso si può solo scrivere, ma in generale?Bene, sapete la risposta:

questo è con la moltiplicazione di matrici che siamo noi a creare la nostra trasformazioni

Quindi deve essere possibile moltiplicazione di due matrici di trasformazione a dare un'altra matrice di trasformazione.E le regole di moltiplicazione di matrici mostrano che questo:

( . . . ) ( . . . )
( . . . ) ( . . . ) = ???

non è un valido matrice multiplcation.Abbiamo bisogno di matrici che possono essere molteplici in ordine per i nostri trasformazioni di essere componibile.Così abbiamo che riga in più.


Ora, il modo in cui ho espresso qui, è in realtà completamente indietro dal matematiche standard di presentazione, in cui la familiarità trasformazioni di rotazione e traslazione sono solo casi particolari di tutta la potenza di trasformazioni di coordinate omogenee sul piano proiettivo - ma io credo che farà di dimostrare che è perché abbiamo bisogno di una riga in più per rendere la piazza matrice, e quindi in grado di essere molteplici, come matrici.

Altri suggerimenti

La risposta è in Coordinate Omogenee.Combinare di rotazione e di traslazione in una operazione di una dimensione extra, è necessario che il modello richiede.Per planare cose questo è di 3 componenti e territoriale, le cose questo è il 4 componenti.Gli operatori a prendere 3 componenti e ritorno 3 componenti che richiedono matrici 3x3.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top