語言

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) 會建構下圖所示的矩陣。

矩陣。

Note

在 .NET 6 和更新版本中,只有 Windows作系統才支援包含此類型的 System.Drawing.Common 套件。 跨平台應用程式使用此類會引發編譯時警告及執行時異常。 如需詳細資訊,請參閱 僅限 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 (英文) 物件中。

注意事項

複合轉換的順序很重要。 一般而言,旋轉、縮放、再轉譯與縮放、旋轉、再轉譯並不相同。 同樣地,矩陣乘法的順序也很重要。 一般而言,ABC 與 BAC 不同。

Matrix 類別提供數種方法來構建複合轉換:Multiply、Rotate、RotateAt、Scale、Shear 和 Translate。 下列範例會建立複合轉換的矩陣,其會先旋轉 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)

建構函式

名稱 Description
Matrix()

初始化該類別的新實例 Matrix 作為單位矩陣。

Matrix(Matrix3x2)

利用指定的 Matrix建構 a matrix 。

Matrix(Rectangle, Point[])

將類別的新實例 Matrix 初始化為由指定矩形與點陣列定義的幾何變換。

Matrix(RectangleF, PointF[])

將類別的新實例 Matrix 初始化為由指定矩形與點陣列定義的幾何變換。

Matrix(Single, Single, Single, Single, Single, Single)

初始化一個包含指定元素的 Matrix 類別實例。

屬性

名稱 Description
Elements

得到一個浮點數陣列,代表該 Matrix元素。

IsIdentity

會得到一個值,表示該 Matrix 矩陣是否為單位矩陣。

IsInvertible

會得到一個值,表示此值 Matrix 是否可逆。

MatrixElements

取得或設定矩陣的元素。

OffsetX

取得此 Matrix的 x 平移值(dx 值,或第三列第一欄的元素)。

OffsetY

取得此 Matrix的 y 平移值(dy 值,或第三列第二欄的元素)。

方法

名稱 Description
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 乘以參數中 matrix 指定的矩陣,以及參數中指定的 order 階數。

Multiply(Matrix)

將此Matrix乘以參數中matrix指定的矩陣,並在指定矩陣前加上。Matrix

Reset()

會重設為 Matrix 單位矩陣的元素。

Rotate(Single, MatrixOrder)

對參數angle中指定的Matrix順時針旋轉,繞原點(零 x 與 y 座標)進行。

Rotate(Single)

在此之前,順 Matrix 時針繞原點旋轉,並依指定角度旋轉。

RotateAt(Single, PointF, MatrixOrder)

以指定順序順時針繞指定點旋轉。Matrix

RotateAt(Single, PointF)

對此 Matrix 進行順時針旋轉,繞參數指定 point 點,並先於旋轉進行前置。

Scale(Single, Single, MatrixOrder)

並依指定順序將指定的尺度向量(scaleX 和 scaleY)套用於此 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)

將指定的平移向量(offsetX 和 offsetY)應用於此 Matrix ,方法是在平移向量前加上。

VectorTransformPoints(Point[])

將陣列中的每個向量乘以矩陣。 此矩陣(第三列)的平移元素被忽略。

VectorTransformPoints(ReadOnlySpan<Point>)

將陣列中的每個向量乘以矩陣。 此矩陣(第三列)的平移元素被忽略。

適用於

另請參閱