Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
Klassen Matrix inkapslar en 3 gånger 3 affinmatris som representerar en geometrisk transformation.
I GDI+ kan du lagra en affintransformering i ett Matrix objekt. Eftersom den tredje kolumnen i en matris som representerar en affintransformering alltid är (0, 0, 1) anger du bara de sex talen i de två första kolumnerna när du skapar ett Matrix objekt.
Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) Instruktionen konstruerar matrisen som visas i följande bild.
Anmärkning
I .NET 6 och senare versioner stöds endast System.Drawing.Common-paketet, som innehåller den här typen, på Windows-operativsystem. Användning av den här typen i plattformoberoende appar orsakar kompileringstid varningar och körningsundantag. Mer information finns i System.Drawing.Common som endast stöds i Windows.
Sammansatta transformeringar
En sammansatt transformering är en sekvens med transformeringar, den ena följt av den andra. Överväg matriserna och omvandlingarna i följande lista:
| Matris | Omvandling |
|---|---|
| Matris A | Rotera 90 grader |
| Matris B | Skala med en faktor 2 i x-riktningen |
| Matris C | Översätt 3 enheter i y-riktningen |
Om du börjar med punkten (2, 1) - representerad av matrisen [2 1 1] - och multiplicerar med A, sedan B, sedan C, kommer punkten (2, 1) att genomgå de tre omvandlingarna i den ordning som anges.
[2 1 1]ABC = [-2 5 1]
I stället för att lagra de tre delarna av den sammansatta omvandlingen i tre separata matriser kan du multiplicera A, B och C för att få en enda 3×3-matris som lagrar hela den sammansatta omvandlingen. Anta ABC = D. Sedan ger en punkt multiplicerad med D samma resultat som en punkt multiplicerad med A, sedan B och sedan C.
[2 1 1]D = [-2 5 1]
Följande bild visar matriserna A, B, C och D.
Det faktum att matrisen för en sammansatt transformering kan bildas genom att multiplicera de enskilda transformeringsmatriserna innebär att alla sekvenser av affintransformeringar kan lagras i ett enda Matrix objekt.
Försiktighet
Ordningen på en sammansatt transformering är viktig. I allmänhet är att rotera, sedan skala och sedan förflytta inte samma sak som att skala, sedan rotera och sedan förflytta. På samma sätt är ordningen på matrisens multiplikation viktig. I allmänhet är ABC inte samma som BAC.
Klassen Matrix innehåller flera metoder för att skapa en sammansatt transformering: Multiply, Rotate, RotateAt, Scale, Shearoch Translate. I följande exempel skapas matrisen för en sammansatt transformering som först roterar 30 grader, sedan skalar med en faktor 2 i y-riktningen och översätter sedan 5 enheter i x-riktningen:
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)