Classe System.Drawing.Drawing2D.Matrix

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

La Matrix classe incapsula una matrice affine 3 per 3 che rappresenta una trasformazione geometrica.

In GDI+, è possibile archiviare una trasformazione affine in un Matrix oggetto . Poiché la terza colonna di una matrice che rappresenta una trasformazione affine è sempre (0, 0, 1), si specificano solo i sei numeri nelle prime due colonne quando si costruisce un Matrix oggetto . L'istruzione Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) costruisce la matrice illustrata nella figura seguente.

Matrice.

Nota

In .NET 6 e versioni successive il pacchetto System.Drawing.Common, che include questo tipo, è supportato solo nei sistemi operativi Windows. L'uso di questo tipo nelle app multipiattaforma causa avvisi in fase di compilazione ed eccezioni in fase di esecuzione. Per altre informazioni, vedere System.Drawing.Common supportato solo in Windows.

Trasformazioni composite

Una trasformazione composita è una sequenza di trasformazioni, una seguita dall'altra. Si considerino le matrici e le trasformazioni nell'elenco seguente:

Con matrice Trasformazione
Matrice A Ruotare 90 gradi
Matrice B Scalare di un fattore pari a 2 nella direzione x
Matrice C Tradurre 3 unità nella direzione y

Se si inizia con il punto (2, 1) - rappresentato dalla matrice [2 1 1] - e moltiplicato per A, quindi B, C, il punto (2, 1) subirà le tre trasformazioni nell'ordine elencato.

[2 1 1]ABC = [-2 5 1]

Anziché archiviare le tre parti della trasformazione composita in tre matrici separate, è possibile moltiplicare A, B e C insieme per ottenere una singola matrice 3×3 che archivia l'intera trasformazione composita. Si supponga che ABC = D. Quindi un punto moltiplicato per D restituisce lo stesso risultato di un punto moltiplicato per A, quindi B, quindi C.

[2 1 1]D = [-2 5 1]

La figura seguente mostra le matrici A, B, C e D.

Matrici A, B, C e D

Il fatto che la matrice di una trasformazione composita possa essere formata moltiplicando le singole matrici di trasformazione, significa che qualsiasi sequenza di trasformazioni affine può essere archiviata in un singolo Matrix oggetto.

Attenzione

L'ordine di una trasformazione composita è importante. In generale, ruotare, quindi ridimensionare, quindi tradurre non è uguale alla scala, quindi ruotare, quindi traslare. Analogamente, l'ordine di moltiplicazione della matrice è importante. In generale, ABC non è uguale a BAC.

La Matrix classe fornisce diversi metodi per la compilazione di una trasformazione composita: Multiply, Rotate, RotateAtScale, Shear, e Translate. Nell'esempio seguente viene creata la matrice di una trasformazione composita che ruota prima di 30 gradi, quindi viene ridimensionata di un fattore pari a 2 nella direzione y e quindi vengono convertite 5 unità nella direzione x:

Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)