Maticové znázornění transformací

Matice m×n je sada čísel uspořádaných v řádcích m a n sloupcích. Následující obrázek ukazuje několik matic.

Illustration of matrices.

Přidáním jednotlivých prvků můžete přidat dvě matice stejné velikosti. Následující obrázek ukazuje dva příklady sčítání matice.

Illustration of matrix addition.

Matici m×n lze vynásobit maticí n×p a výsledkem je matice m×p. Počet sloupců v první matici musí být stejný jako počet řádků v druhé matici. Například matici 4×2 lze vynásobit maticí 2×3 a vytvořit matici 4×3.

Body v rovině a řádcích a sloupcích matice lze považovat za vektory. Například (2, 5) je vektor se dvěma složkami a (3, 7, 1) je vektor se třemi komponentami. Tečkovaný součin dvou vektorů je definován takto:

(a, b) • (c, d) = ac + bd

(a, b, c) • (d, e, f) = ad + be + cf

Například tečkovaný součin (2, 3) a (5, 4) je (2)(5) + (3)(4) = 22. Tečkovaný součin (2, 5, 1) a (4, 3, 1) je (2)(4) + (5)(3) + (1)(1) = 24. Všimněte si, že tečkovaný součin dvou vektorů je číslo, nikoli jiný vektor. Všimněte si také, že tečkovaný součin můžete vypočítat pouze v případě, že dva vektory mají stejný počet součástí.

Let A(i, j) být položka v matici A v ith řádku a jth sloupec. Například A(3; 2) je položka v matici A ve 3. řádku a ve 2. sloupci. Předpokládejme, že A, B a C jsou matice a AB = C. Položky jazyka C se počítají takto:

C(i, j) = (řádek i z A) • (sloupec j z B)

Následující obrázek ukazuje několik příkladů násobení matice.

Illustration of matrix multiplication.

Pokud bod v rovině považujete za 1×2 matici, můžete ho transformovat tak, že ho vynásobíte 2×2 maticí. Následující obrázek znázorňuje několik transformací použitých v bodě (2, 1).

Matrix transformation to a point in a plane.

Všechny transformace zobrazené na předchozím obrázku jsou lineární transformace. Některé další transformace, například překlad, nejsou lineární a nelze je vyjádřit jako násobení maticí 2×2. Předpokládejme, že chcete začít bodem (2, 1), otočit 90 stupňů, přeložit 3 jednotky ve směru x a přeložit 4 jednotky ve směru y. Toho můžete dosáhnout pomocí násobení matice následované sčítáním matice.

Illustration of matrix multiplication followed by a matrix addition.

Lineární transformace (násobení maticí 2×2) následovaná překladem (sčítání matice 1×2) se nazývá affinová transformace. Alternativou k uložení affinové transformace do dvojice matic (jedna pro lineární část a druhá pro překlad) je uložení celé transformace v matici 3×3. Aby to fungovalo, musí být bod v rovině uložen v matici 1×3 s fiktivním třetí souřadnicí. Obvyklou technikou je, aby se všechny třetí souřadnice rovna 1. Například bod (2, 1) je reprezentován maticí [2 1 1]. Následující obrázek znázorňuje transformaci affinu (otočit o 90 stupňů; přeložit 3 jednotky ve směru x, 4 jednotky ve směru y) vyjádřené jako násobení jednou 3×3 maticí.

Illustration of an affine transformation.

V předchozím příkladu se bod (2, 1) mapuje na bod (2, 6). Všimněte si, že třetí sloupec matice 3×3 obsahuje čísla 0, 0, 1. To bude vždy případ pro 3×3 matici affinové transformace. Důležitá čísla jsou šest čísel ve sloupcích 1 a 2. Levá horní část matice 2×2 představuje lineární část transformace a první dvě položky v prvním řádku představují překlad.

Illustration of linear and translation part of a matrix transformation.

V GDI+ můžete uložit afinovou 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 předchozím obrázku.

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:

Matrice 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čneme bodem (2, 1) – vyjádřeným maticí [2 1 1] a vynásobíme 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.

Illustration of matrix A, B, C, and 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)

Následující obrázek znázorňuje matici.

Matrix illustration of a composite transformation.

Viz také