Matrix Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Zapouzdřuje 3-by-3 affinovou matici, která představuje geometrické transformace. Tato třída se nemůže dědit.
public ref class Matrix sealed : MarshalByRefObject, IDisposable
public sealed class Matrix : MarshalByRefObject, IDisposable
type Matrix = class
inherit MarshalByRefObject
interface IDisposable
Public NotInheritable Class Matrix
Inherits MarshalByRefObject
Implements IDisposable
- Dědičnost
- Implementuje
Poznámky
Matrix Třída zapouzdřuje 3-by-3 afinní matici, která představuje geometrickou transformaci.
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.
Note
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čte 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.
Caution
Pořadí složené transformace je důležité. Obecně platí, že otočit, pak škálovat, pak posunout není totéž jako škálovat, pak otočit a pak posunout. 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)
Konstruktory
| Name | Description |
|---|---|
| Matrix() |
Inicializuje novou instanci Matrix třídy jako matici identity. |
| Matrix(Matrix3x2) |
Matrix Vytvoří pomocí zadaného |
| Matrix(Rectangle, Point[]) |
Inicializuje novou instanci Matrix třídy na geometrické transformace definované zadaným obdélníkem a polem bodů. |
| Matrix(RectangleF, PointF[]) |
Inicializuje novou instanci Matrix třídy na geometrické transformace definované zadaným obdélníkem a polem bodů. |
| Matrix(Single, Single, Single, Single, Single, Single) |
Inicializuje novou instanci Matrix třídy se zadanými prvky. |
Vlastnosti
| Name | Description |
|---|---|
| Elements |
Získá pole hodnot s plovoucí desetinou čárkou, která představuje prvky tohoto Matrix. |
| IsIdentity |
Získá hodnotu označující, zda se jedná Matrix o matici identity. |
| IsInvertible |
Získá hodnotu označující, zda je to Matrix invertovatelné. |
| MatrixElements |
Získá nebo nastaví prvky matice. |
| OffsetX |
Získá hodnotu x překladu (dx hodnota, nebo prvek ve třetím řádku a prvním sloupci) tohoto Matrix. |
| OffsetY |
Získá hodnotu překladu y (hodnota dy, nebo prvek ve třetím řádku a druhém sloupci) tohoto Matrix. |
Metody
| Name | Description |
|---|---|
| Clone() |
Vytvoří přesnou kopii tohoto Matrixsouboru . |
| CreateObjRef(Type) |
Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru sloužícího ke komunikaci se vzdáleným objektem. (Zděděno od MarshalByRefObject) |
| Dispose() |
Uvolní všechny prostředky používané tímto Matrixnástrojem . |
| Equals(Object) |
Testuje, zda zadaný objekt je Matrix a je identický s tímto Matrix. |
| Finalize() |
Umožňuje objektu pokusit se uvolnit prostředky a provést další operace čištění před uvolněním paměti. |
| GetHashCode() |
Vrátí kód hash. |
| GetLifetimeService() |
Zastaralé.
Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| InitializeLifetimeService() |
Zastaralé.
Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
| Invert() |
Invertuje to Matrix, pokud je invertovatelný. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| MemberwiseClone(Boolean) |
Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu. (Zděděno od MarshalByRefObject) |
| Multiply(Matrix, MatrixOrder) |
Vynásobí Matrix maticí zadanou v parametru |
| Multiply(Matrix) |
Vynásobí to Matrix maticí zadanou v parametru |
| Reset() |
Matrix Obnoví ho, aby měly prvky matice identit. |
| Rotate(Single, MatrixOrder) |
Použije otočení po směru hodinových ručiček množství zadané v parametru |
| Rotate(Single) |
Před tímto Matrix otočením po směru hodinových ručiček kolem počátku a podle zadaného úhlu. |
| RotateAt(Single, PointF, MatrixOrder) |
Použije otočení po směru hodinových ručiček o zadaném bodu Matrix v zadaném pořadí. |
| RotateAt(Single, PointF) |
Použije otočení Matrix po směru hodinových ručiček kolem bodu zadaného v parametru |
| Scale(Single, Single, MatrixOrder) |
Použije k tomu |
| Scale(Single, Single) |
Použije k tomu Matrix zadaný vektor měřítka tím, že předzálohuje vektor měřítka. |
| Shear(Single, Single, MatrixOrder) |
Použije zadaný vektor shear na tento Matrix v zadaném pořadí. |
| Shear(Single, Single) |
Použije k tomu Matrix zadaný shear vector tím, že předependuje smykovou transformaci. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
| TransformPoints(Point[]) |
Použije geometrické transformace reprezentované tímto Matrix na zadanou matici bodů. |
| TransformPoints(PointF[]) |
Použije geometrické transformace reprezentované tímto Matrix na zadanou matici bodů. |
| TransformPoints(ReadOnlySpan<Point>) |
Použije geometrické transformace reprezentované tímto Matrix na zadanou matici bodů. |
| TransformPoints(ReadOnlySpan<PointF>) |
Použije geometrické transformace reprezentované tímto Matrix na zadanou matici bodů. |
| TransformVectors(Point[]) |
Použije pouze měřítko a otočí součásti tohoto Matrix parametru na zadanou matici bodů. |
| TransformVectors(PointF[]) |
Vynásobí každý vektor v matici maticí. Prvky překladu této matice (třetí řádek) se ignorují. |
| TransformVectors(ReadOnlySpan<Point>) |
Vynásobí každý vektor v matici maticí. Prvky překladu této matice (třetí řádek) se ignorují. |
| TransformVectors(ReadOnlySpan<PointF>) |
Vynásobí každý vektor v matici maticí. Prvky překladu této matice (třetí řádek) se ignorují. |
| Translate(Single, Single, MatrixOrder) |
Použije zadaný vektor překladu na tento Matrix v zadaném pořadí. |
| Translate(Single, Single) |
Použije k tomu |
| VectorTransformPoints(Point[]) |
Vynásobí každý vektor v matici maticí. Prvky překladu této matice (třetí řádek) se ignorují. |
| VectorTransformPoints(ReadOnlySpan<Point>) |
Vynásobí každý vektor v matici maticí. Prvky překladu této matice (třetí řádek) se ignorují. |