Megosztás a következőn keresztül:


Átalakítások mátrixos ábrázolása

Az m×n mátrix m sorokba és n oszlopokba rendezett számok készlete. Az alábbi ábrán több mátrix látható.

Mátrixok illusztrációja.

Az egyes elemek hozzáadásával két azonos méretű mátrixot adhat hozzá. Az alábbi ábrán két példa látható a mátrix hozzáadására.

A mátrix hozzáadásának ábrája.

Az m×n mátrix megszorzható egy n×p mátrixtal, és az eredmény egy m×p mátrix. Az első mátrix oszlopainak számának meg kell egyeznie a második mátrix sorainak számával. Egy 4×2 mátrix például megszorozható egy 2×3 mátrixtal egy 4×3 mátrix létrehozásához.

A mátrix síkjában, soraiban és oszlopaiban lévő pontok vektoroknak tekinthetők. A (2, 5) például egy két összetevőből álló vektor, a (3, 7, 1) pedig egy három összetevőből álló vektor. Két vektor pont szorzata a következőképpen van definiálva:

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

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

A (2, 3) és (5, 4) pont szorzata például (2)(5) + (3)(4) = 22. A (2, 5, 1) és (4, 3, 1) pont szorzata (2)(4) + (5)(3) + (1)(1) = 24. Vegye figyelembe, hogy a két vektor pont szorzata egy szám, nem pedig egy másik vektor. Azt is vegye figyelembe, hogy a pont terméket csak akkor számíthatja ki, ha a két vektor azonos számú összetevőt tartalmaz.

Legyen az A(i, j) az A mátrix bejegyzése az i. sorban és a j. oszlopban. Az A(3; 2) például az A mátrix 3. sorában és a 2. oszlopban lévő bejegyzése. Tegyük fel, hogy az A, B és C mátrixok, és AB = C. A C bejegyzéseit a következőképpen számítjuk ki:

C(i, j) = (A i. sora) • (B oszlop j oszlopa)

Az alábbi ábra több példát mutat be a mátrixok szorzására.

A mátrix szorzásának illusztrációja.

Ha egy sík egy pontjára 1×2 mátrixként gondol, átalakíthatja ezt a pontot úgy, hogy megszorozza egy 2×2 mátrixtal. Az alábbi ábrán a pontra alkalmazott számos átalakítás látható (2, 1).

Mátrix átalakítása egy sík egy pontjára.

Az előző ábrán látható összes átalakítás lineáris átalakítás. Bizonyos egyéb átalakítások, például a fordítás, nem lineárisak, és nem fejezhetők ki szorzásként 2×2 mátrixtal. Tegyük fel, hogy a ponttal (2, 1) szeretné kezdeni, forgassa el 90 fokkal, fordítsa le 3 egységre az x irányban, és fordítsa le 4 egységre az y irányban. Ezt egy mátrix-szorzás, majd egy mátrix összeadása segítségével teheti meg.

A mátrixok szorzásának ábrája, majd egy mátrix hozzáadása.

A lineáris transzformációt (2×2 mátrix szorzását) és egy fordítást (1×2 mátrix hozzáadásával) affin transzformációnak nevezzük. Affine-transzformáció egy mátrixpárban való tárolásának alternatívája (egy a lineáris részhez és egy a fordításhoz) a teljes transzformáció tárolása egy 3×3 mátrixban. Ahhoz, hogy ez működjön, a sík egy pontját egy 1×3 mátrixban kell tárolni egy hamis 3. koordinátával. A szokásos technika az, hogy az összes 3. koordinátát 1-nek kell egyenlővé tenni. A pontot (2, 1) például a mátrix [2 1 1] jelöli. Az alábbi ábra egy affine-transzformációt mutat (90 fok elforgatása; 3 egység fordítása x irányban, 4 egység y irányban) egyetlen 3×3 mátrix szorzásaként kifejezve.

Affine-transzformáció illusztrációja.

Az előző példában a pont (2, 1) a ponthoz van megfeleltetve (2, 6). Vegye figyelembe, hogy a 3×3 mátrix harmadik oszlopa a 0, 0, 1 számokat tartalmazza. Ez mindig így lesz az affin transzformáció 3×3 mátrixában. A fontos számok az 1. és a 2. oszlopban szereplő hat szám. A mátrix bal felső 2×2 része az átalakítás lineáris részét jelöli, a harmadik sor első két bejegyzése pedig a fordítást.

Mátrix-átalakítás lineáris és fordítási részének illusztrációja.

A GDI+-ban egy objektumban tárolhat affine-transzformációt Matrix . Mivel egy mátrix harmadik oszlopa mindig (0, 0, 1) affine-transzformációt jelöl, az első két oszlopban csak a hat számot kell megadnia egy Matrix objektum létrehozásakor. Az utasítás Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) az előző ábrán látható mátrixot hozza létre.

Összetett átalakítások

Az összetett átalakítás az átalakítások sorozata, amelyet a másik követ. Vegye figyelembe az alábbi listában szereplő mátrixokat és átalakításokat:

Mátrix Transzformáció
A mátrix Forgatás 90 fokkal
B mátrix Skálázás 2 tényezővel az x irányban
C mátrix 3 egység fordítása az y irányban

Ha a ponttal (2, 1) kezdjük – amelyet a mátrix [2 1 1] jelöl –, és az A, majd a B, majd a C szorzattal szorozzuk, a pont (2, 1) a felsorolt sorrendben a három transzformáción megy keresztül.

[2 1 1]ABC = [-2 5 1]

Ahelyett, hogy az összetett transzformáció három részét három külön mátrixban tárolné, az A, B és C szorzatával egyetlen 3×3 mátrixot kaphat, amely a teljes összetett transzformációt tárolja. Tegyük fel, hogy ABC = D. Ezután a D-vel szorzott pont ugyanazt az eredményt adja, mint az A, majd a B, majd a C szorzata.

[2 1 1]D = [-2 5 1]

Az alábbi ábra az A, B, C és D mátrixokat mutatja be.

Az A, B, C és D mátrix illusztrációja.

Az a tény, hogy az összetett transzformáció mátrixa az egyes transzformációs mátrixok szorzásával alakítható ki, azt jelenti, hogy az affin-transzformációk sorozata egyetlen Matrix objektumban tárolható.

Figyelmeztetés

Az összetett átalakítás sorrendje fontos. Általánosságban elmondható, hogy a forgatás, majd a skálázás, majd a fordítás nem ugyanaz, mint a skálázás, majd a forgatás, majd a fordítás. Hasonlóképpen fontos a mátrix szorzásának sorrendje is. Az ABC általában nem ugyanaz, mint a BAC.

Az Matrix osztály számos módszert kínál az összetett átalakítás létrehozásához: Multiply, Rotate, RotateAt, Scale, Shearés Translate. Az alábbi példa egy összetett transzformáció mátrixát hozza létre, amely először 30 fokban forog, majd 2-es tényezővel skáláz az y irányban, majd 5 egységet fordít le az x irányban:

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)

Az alábbi ábrán a mátrix látható.

Összetett transzformáció mátrix illusztrációja.

Lásd még