Matrix Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инкапсулирует матрицу аффина 3-3, представляющую геометрическое преобразование. Этот класс не наследуется.
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
- Наследование
- Реализации
Комментарии
Класс Matrix инкапсулирует матрицу аффина 3-3, представляющую геометрическое преобразование.
В GDI+можно сохранить аффинное преобразование в объекте Matrix . Так как третий столбец матрицы, представляющий преобразование аффина, всегда равен (0, 0, 1), при создании объекта Matrix указывается только шесть чисел в первых двух столбцах. Оператор Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) создает матрицу, показанную на следующем рисунке.
Note
В .NET 6 и более поздних версиях пакет System.Drawing.Common, который включает этот тип, поддерживается только в операционных системах Windows. Использование этого типа в кроссплатформенных приложениях вызывает предупреждения во время компиляции и исключения во время выполнения. Дополнительные сведения см. в статье System.Drawing.Common, поддерживаемой только в Windows.
Составные преобразования
Составное преобразование — это последовательность преобразований, выполняемых одно за другим. Рассмотрим матрицы и преобразования в следующем списке:
| Матрица | Преобразование |
|---|---|
| Матрица A | Поворот 90 градусов |
| Матрица B | Масштабирование по коэффициенту 2 в направлении x |
| Матрица C | Перевод 3 единиц в направлении y |
Если начать с точки (2, 1) - представленную матрицой [2 1 1] - и умножить на A, то B, то C, точка (2, 1) будет проходить три преобразования в указанном порядке.
[2 1 1]ABC = [-2 5 1]
Вместо хранения трех частей составного преобразования в трех отдельных матрицах можно умножить A, B и C вместе, чтобы получить одну матрицу 3×3, которая сохраняет все составное преобразование. Предположим ABC = D. Затем точка, умноженная на D, дает тот же результат, что и точка, умноженная на A, а затем B, а затем C.
[2 1 1]D = [-2 5 1]
На следующем рисунке показаны матрицы A, B, C и D.
Тот факт, что матрица составного преобразования может быть сформирована путем умножения отдельных матриц преобразования означает, что любая последовательность аффинных преобразований может храниться в одном объекте Matrix.
Caution
Порядок составного преобразования важен. Вообще, поворот, затем масштабирование и затем перемещение — это не то же самое, что масштабирование, затем поворот и перемещение. Аналогичным образом важно, чтобы порядок умножения матрицы был важен. Как правило, ABC не совпадает с BAC.
Класс Matrix предоставляет несколько методов создания составного преобразования: Multiply, Rotate, RotateAt, Scale, Shearи Translate. В следующем примере создается матрица составного преобразования, которая сначала поворачивает 30 градусов, а затем масштабируется на коэффициент 2 в направлении y, а затем преобразует 5 единиц в направлении 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)
Конструкторы
| Имя | Описание |
|---|---|
| Matrix() |
Инициализирует новый экземпляр Matrix класса в виде матрицы удостоверений. |
| Matrix(Matrix3x2) |
Создает указанный Matrix объект |
| Matrix(Rectangle, Point[]) |
Инициализирует новый экземпляр Matrix класса в геометрическое преобразование, определенное заданным прямоугольником и массивом точек. |
| Matrix(RectangleF, PointF[]) |
Инициализирует новый экземпляр Matrix класса в геометрическое преобразование, определенное заданным прямоугольником и массивом точек. |
| Matrix(Single, Single, Single, Single, Single, Single) |
Инициализирует новый экземпляр Matrix класса с указанными элементами. |
Свойства
| Имя | Описание |
|---|---|
| Elements |
Возвращает массив значений с плавающей запятой, представляющий элементы этого Matrixэлемента. |
| IsIdentity |
Возвращает значение, указывающее, является ли это Matrix матрица удостоверений. |
| IsInvertible |
Возвращает значение, указывающее, является ли это Matrix инвертируемым. |
| MatrixElements |
Возвращает или задает элементы матрицы. |
| OffsetX |
Возвращает значение преобразования x (значение dx или элемент в третьей строке и первом столбце) этого Matrixэлемента. |
| OffsetY |
Возвращает значение перевода y (значение dy или элемент в третьей строке и втором столбце) этого Matrixэлемента. |
Методы
| Имя | Описание |
|---|---|
| Clone() |
Создает точную копию этого Matrixобъекта. |
| CreateObjRef(Type) |
Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
| Dispose() |
Освобождает все ресурсы, используемые этим Matrixпараметром. |
| Equals(Object) |
Проверяет, является ли указанный Matrix объект идентичным этому Matrixобъекту. |
| Finalize() |
Позволяет объекту пытаться освободить ресурсы и выполнять другие операции очистки перед его восстановлением сборкой мусора. |
| GetHashCode() |
Возвращает хэш-код. |
| GetLifetimeService() |
Устаревшие.
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| InitializeLifetimeService() |
Устаревшие.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| Invert() |
Инвертирует это Matrix, если это неуверно. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| MemberwiseClone(Boolean) |
Создает неглубокую копию текущего MarshalByRefObject объекта. (Унаследовано от MarshalByRefObject) |
| Multiply(Matrix, MatrixOrder) |
Умножает это Matrix на матрицу, указанную в |
| Multiply(Matrix) |
Умножает это Matrix на матрицу, указанную в параметре |
| Reset() |
Сбрасывает этот Matrix параметр, чтобы элементы матрицы удостоверений были сброшены. |
| Rotate(Single, MatrixOrder) |
Применяет по часовой стрелке по часовой стрелке количество, указанное в |
| Rotate(Single) |
Перед этим Matrix поворотом по часовой стрелке вокруг источника и заданным углом. |
| RotateAt(Single, PointF, MatrixOrder) |
Применяет поворот по часовой стрелке относительно указанной точки в Matrix указанном порядке. |
| RotateAt(Single, PointF) |
Применяет к этому Matrix поворот по часовой стрелке вокруг точки, указанной в параметре |
| Scale(Single, Single, MatrixOrder) |
Применяет указанный вектор масштабирования ( |
| Scale(Single, Single) |
Применяет указанный вектор масштабирования к этому Matrix путем при подготовке вектора масштабирования. |
| Shear(Single, Single, MatrixOrder) |
Применяет к этому Matrix указанный вектор сдвига в указанном порядке. |
| Shear(Single, Single) |
Применяет к этому Matrix указанный вектор стрижения путем подготовки преобразования шери. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| TransformPoints(Point[]) |
Применяет геометрическое преобразование, представленное этим Matrix , к указанному массиву точек. |
| TransformPoints(PointF[]) |
Применяет геометрическое преобразование, представленное этим Matrix , к указанному массиву точек. |
| TransformPoints(ReadOnlySpan<Point>) |
Применяет геометрическое преобразование, представленное этим Matrix , к указанному массиву точек. |
| TransformPoints(ReadOnlySpan<PointF>) |
Применяет геометрическое преобразование, представленное этим Matrix , к указанному массиву точек. |
| TransformVectors(Point[]) |
Применяет только компоненты масштабирования и поворота к Matrix указанному массиву точек. |
| TransformVectors(PointF[]) |
Умножает каждый вектор в массиве на матрицу. Элементы перевода этой матрицы (третья строка) игнорируются. |
| TransformVectors(ReadOnlySpan<Point>) |
Умножает каждый вектор в массиве на матрицу. Элементы перевода этой матрицы (третья строка) игнорируются. |
| TransformVectors(ReadOnlySpan<PointF>) |
Умножает каждый вектор в массиве на матрицу. Элементы перевода этой матрицы (третья строка) игнорируются. |
| Translate(Single, Single, MatrixOrder) |
Применяет указанный вектор перевода к этому Matrix в указанном порядке. |
| Translate(Single, Single) |
Применяет указанный вектор перевода ( |
| VectorTransformPoints(Point[]) |
Умножает каждый вектор в массиве на матрицу. Элементы перевода этой матрицы (третья строка) игнорируются. |
| VectorTransformPoints(ReadOnlySpan<Point>) |
Умножает каждый вектор в массиве на матрицу. Элементы перевода этой матрицы (третья строка) игнорируются. |