System.Drawing.Drawing2D.Matrix – třída
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Matrix Třída zapouzdřuje 3-by-3 affine matice, která představuje geometrické transformace.
V GDI+ můžete uložit affinovou transformaci v objektu Matrix . Vzhledem k tomu, že třetí sloupec matice představující affinovou transformaci je vždy (0, 0, 1), zadáte při vytváření objektu Matrix pouze šest čísel v prvních dvou sloupcích. Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4)
Příkaz vytvoří matici zobrazenou na následujícím obrázku.
Poznámka:
V .NET 6 a novějších verzích je balíček System.Drawing.Common, který obsahuje tento typ, podporován pouze v operačních systémech Windows. Použití tohoto typu v multiplatformních aplikacích způsobuje upozornění v době kompilace a výjimky za běhu. Další informace naleznete v tématu System.Drawing.Common podporován pouze ve Windows.
Složené transformace
Složená transformace je posloupnost transformací, za kterou následuje druhá. Podívejte se na matice a transformace v následujícím seznamu:
Matice | Transformace |
---|---|
Matice A | Otočení o 90 stupňů |
Matice B | Měřítko podle faktoru 2 ve směru x |
Matice C | Přeložit 3 jednotky ve směru y |
Pokud začnete s bodem (2, 1) – reprezentovanou maticí [2 1 1] – a vynásobíte A, pak B, pak C, bod (2, 1) projde třemi transformacemi v uvedeném pořadí.
[2 1 1]ABC = [-2 5 1]
Místo uložení tří částí složené transformace do tří samostatných matic můžete vynásobit A, B a C dohromady a získat jednu 3×3 matici, která ukládá celou složenou transformaci. Předpokládejme , že ABC = D
. Potom bod vynásobený písmenem D vrátí stejný výsledek jako bod vynásobený A, pak B a potom C.
[2 1 1]D = [-2 5 1]
Následující obrázek znázorňuje matice A, B, C a D.
Skutečnost, že matici složené transformace lze vytvořit vynásobením jednotlivých transformačních matic znamená, že jakákoli posloupnost transformací affinu může být uložena v jednom Matrix objektu.
Upozornění
Pořadí složené transformace je důležité. Obecně platí, že otočit, pak škálovat, pak přeložit není totéž jako měřítko, pak otočit a pak přeložit. Podobně je důležité pořadí násobení matice. Obecně platí, že ABC není totéž jako BAC.
Třída Matrix poskytuje několik metod pro vytvoření složené transformace: Multiply, Rotate, RotateAt, Scale, , Sheara Translate. Následující příklad vytvoří matici složené transformace, která nejprve otočí 30 stupňů, pak se škáluje podle faktoru 2 ve směru y a pak přeloží 5 jednotek ve směru 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)