Sdílet prostřednictvím


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.

Matice.

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.

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)