Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Klasa Matrix hermetyzuje macierz afiniczną 3-by-3 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 obiektu Matrix należy określić tylko sześć liczb w pierwszych dwóch kolumnach. Polecenie Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) konstruuje macierz pokazaną na poniższym rysunku.
Uwaga / Notatka
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 w czasie 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:
| Matryca | Przekształcenie |
|---|---|
| Macierz A | Obróć o 90 stopni |
| Macierz B | Skalowanie według współczynnika 2 w kierunku x |
| Macierz C | Przesuń 3 jednostki w osi 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 obiekcie Matrix.
Ostrzeżenie
Kolejność transformacji złożonej jest ważna. Ogólnie rzecz biorąc, obróć, potem skaluj, a następnie przesuń to nie to samo co skaluj, potem obróć, a następnie przesuń. 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, RotateAt, Scale, Sheari Translate. Poniższy przykład tworzy macierz transformacji złożonej, która najpierw obraca o 30 stopni, następnie skaluje przez współczynnik 2 w kierunku y, a na końcu przesuwa o 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)