Maticové znázornění transformací
Matice m×n je sada čísel uspořádaných do m řádků a n sloupců. Následující obrázek ukazuje několik matic.
obrázek
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.
Matici m×n lze vynásobit n×p matici a výsledkem je matice m×p. Počet sloupců v první matici musí být stejný jako počet řádků v druhé matici. Matici 4 ×2 lze například vynásobit 2 maticí ×3 a vytvořit 4 ×3 matici.
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 v 3rd řádku a 2nd sloupec. 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.
Pokud bod v rovině považujete za 1 × 2 matici, můžete tento bod transformovat vynásobením 2 × 2 matice. Následující obrázek znázorňuje několik transformací použitých v bodě (2, 1).
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í 2 × 2 maticí. 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 provedením násobení matice a následným sčítáním matice.
Lineární transformace (násobení 2 × 2 matice) následovaná překladem (sčítáním 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 do 3 × 3 matice. Aby to fungovalo, musí být bod v rovině uložen v matici 1 × 3 s fiktivním souřadnicemi. 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 afinovou transformaci (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í.
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í 2 × 2 část matice představuje lineární část transformace a první dvě položky v 3. řádku představují překlad.
Ve Windows GDI+ můžete uložit afinovou transformaci do objektu Matice. Protože třetí sloupec matice, která představuje affin transformace je vždy (0, 0, 1), zadáte pouze šest čísel v prvních dvou sloupcích při vytvoření Matice objektu. Příkaz Matrix myMatrix(0.0f, 1.0f, -1.0f, 0.0f, 3.0f, 4.0f);
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:
- Matice A Otočit o 90 stupňů
- Matice B – měřítko podle faktoru 2 ve směru x
- Matrix C Translate 3 units in the y direction
Pokud začnete bodem (2, 1) – reprezentovanou maticí [2 1 1] a vynásobíte písmenem 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.
obrázek
Skutečnost, že matici složené transformace lze vytvořit vynásobením jednotlivých transformačních matic znamená, že jakákoli posloupnost affinových transformací může být uložena v jednom matici objektu.
Poznámka
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 Matice poskytuje několik metod pro vytvoření složené transformace: Matice::Násobit, Matice::Otočit, Matice::RotateAt, Matice::Měřítko, Matice ::Sheara Matice::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;
myMatrix.Rotate(30.0f);
myMatrix.Scale(1.0f, 2.0f, MatrixOrderAppend);
myMatrix.Translate(5.0f, 0.0f, MatrixOrderAppend);
Následující obrázek znázorňuje matici.