Matrix 类

定义

封装表示几何变换的 3 by-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 类封装表示几何变换的 3x3 仿射矩阵。

在 GDI+ 中,可以将仿射变换存储在 Matrix 对象中。 由于表示相交转换的矩阵的第三列始终为 (0, 0, 1),因此在构造 Matrix 对象时,仅指定前两列中的六个数字。 该语句 Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) 构造下图所示的矩阵。

矩阵。

注释

在 .NET 6 及更高版本中,包含此类型的 System.Drawing.Common 包 仅支持在 Windows 操作系统上运行。 在跨平台应用中使用此类型会导致编译时警告和运行时异常。 有关详细信息,请参阅 仅在 Windows 上支持的 System.Drawing.Common。

复合转换

复合变换是一系列连续进行的变换。 请考虑以下列表中的矩阵和转换:

矩阵 转变
矩阵 A 旋转 90 度
矩阵 B 在 x 方向上缩放 2 倍
矩阵 C 在 y 方向平移 3 个单位

如果从点 (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 乘以 A、B、C 相同的结果。

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

下图显示了矩阵 A、B、C 和 D。

矩阵 A、B、C 和 D

复合转换的矩阵可以通过乘以单个转换矩阵来形成这一事实意味着任何相交转换序列都可以存储在单个 Matrix 对象中。

Caution

复合转换的顺序非常重要。 一般来说,旋转、缩放、平移与缩放、旋转、平移是不同的。 同样,矩阵乘法的顺序也很重要。 通常,ABC 与 BAC 不同。

Matrix 类提供了几种用于生成复合转换的方法:MultiplyRotateRotateAtScaleShearTranslate。 以下示例创建了一个复合变换矩阵,该矩阵首先旋转 30 度,然后在 y 方向按 2 倍缩放,最后在 x 方向平移 5 个单位。

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

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

获取此 Matrix值的 y 转换值(dy 值或第三行和第二列中的元素)。

方法

名称 说明
Clone()

创建此 Matrix副本的确切副本。

CreateObjRef(Type)

创建一个对象,其中包含生成用于与远程对象通信的代理所需的所有相关信息。

(继承自 MarshalByRefObject)
Dispose()

释放由此 Matrix使用的所有资源。

Equals(Object)

测试指定的对象是否为 MatrixMatrix与此相同。

Finalize()

允许对象在垃圾回收回收资源之前尝试释放资源并执行其他清理操作。

GetHashCode()

返回哈希代码。

GetLifetimeService()
已过时.

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializeLifetimeService()
已过时.

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
Invert()

反转这 Matrix一点,如果它是不可逆的。

MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
Multiply(Matrix, MatrixOrder)

将此 Matrix 乘以参数中指定的 matrix 矩阵,以及参数中指定的 order 顺序。

Multiply(Matrix)

将此参数 Matrix 中指定的 matrix 矩阵乘以指定 Matrix前的矩阵。

Reset()

将其 Matrix 重置为具有标识矩阵的元素。

Rotate(Single, MatrixOrder)

为此应用参数中指定的 angle 量(零 x 和 y 坐标) Matrix的顺时针旋转。

Rotate(Single)

Matrix前面是顺时针旋转,围绕原点和指定角度。

RotateAt(Single, PointF, MatrixOrder)

按指定顺序将指定点的顺时针旋转应用于此 Matrix 点。

RotateAt(Single, PointF)

在参数中指定的Matrix点周围应用顺时针旋转point,并附加旋转。

Scale(Single, Single, MatrixOrder)

使用指定的顺序将指定的刻度向量 (scaleXscaleY) 应用于此 Matrix 范围。

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)

通过附加翻译向量,将指定的翻译向量 (offsetXoffsetY) 应用于此 Matrix 向量。

VectorTransformPoints(Point[])

将数组中的每个向量乘以矩阵。 忽略此矩阵(第三行)的转换元素。

VectorTransformPoints(ReadOnlySpan<Point>)

将数组中的每个向量乘以矩阵。 忽略此矩阵(第三行)的转换元素。

适用于

另请参阅