System.Drawing.Drawing2D.Matrix, klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Klasa Matrix hermetyzuje macierz 3-by-3 affine reprezentującą transformację geometryczną.
W GDI+można przechowywać przekształcenie affine w Matrix obiekcie. Ponieważ trzecia kolumna macierzy reprezentująca przekształcenie affine jest zawsze (0, 0, 1), podczas konstruowania Matrix obiektu należy określić tylko sześć liczb w pierwszych dwóch kolumnach. Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4)
Instrukcja konstruuje macierz pokazaną na poniższym rysunku.
Uwaga
W wersjach .NET 6 i nowszych pakiet System.Drawing.Common, który zawiera ten typ, jest obsługiwany tylko w systemach operacyjnych Windows. Użycie tego typu w aplikacjach międzyplatformowych powoduje ostrzeżenia w czasie kompilacji i wyjątki czasu wykonywania. Aby uzyskać więcej informacji, zobacz System.Drawing.Common supported only on Windows (Obsługiwane tylko w systemie Windows).
Przekształcenia złożone
Transformacja złożona to sekwencja przekształceń, po której następuje druga. Rozważ macierze i przekształcenia na poniższej liście:
Macierz | Przekształcenie |
---|---|
Macierz A | Obracanie 90 stopni |
Macierz B | Skalowanie według współczynnika 2 w kierunku x |
Macierz C | Przetłumacz 3 jednostki w kierunku y |
Jeśli zaczniesz od punktu (2, 1) - reprezentowanego przez macierz [2 1 1] - i pomnożysz przez A, następnie B, A, a następnie C, punkt (2, 1) przejdzie trzy przekształcenia w podanej kolejności.
[2 1 1]ABC = [-2 5 1]
Zamiast przechowywać trzy części transformacji złożonej w trzech oddzielnych macierzach, można pomnożyć A, B i C razem, aby uzyskać pojedynczą macierz 3×3, która przechowuje całą transformację złożoną. Załóżmy, że ABC = D
. Następnie punkt pomnożony przez D daje taki sam wynik jak punkt pomnożony przez A, a następnie B, a następnie C.
[2 1 1]D = [-2 5 1]
Poniższa ilustracja przedstawia macierze A, B, C i D.
Fakt, że macierz przekształcenia złożonego można utworzyć przez pomnożenie poszczególnych macierzy transformacji oznacza, że każda sekwencja przekształceń affine może być przechowywana w jednym Matrix obiekcie.
Uwaga
Kolejność transformacji złożonej jest ważna. Ogólnie rzecz biorąc, obróć, a następnie skaluj, a następnie przetłumacz nie jest taka sama jak skala, a następnie obróć, a następnie przetłumacz. Podobnie kolejność mnożenia macierzy jest ważna. Ogólnie rzecz biorąc, ABC nie jest taki sam jak BAC.
Klasa Matrix udostępnia kilka metod tworzenia transformacji złożonej: Multiply, , Rotate, RotateAtScale, Shear, i Translate. Poniższy przykład tworzy macierz transformacji złożonej, która najpierw obraca 30 stopni, a następnie skaluje według współczynnika 2 w kierunku y, a następnie tłumaczy 5 jednostek w kierunku 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)