変換の行列表現Matrix Representation of Transformations

M × n マトリックスは、一連の数字が m 個の行と n 個の列に配置します。An m×n matrix is a set of numbers arranged in m rows and n columns. 次の図は、いくつかのマトリックスを示します。The following illustration shows several matrices.

変換Transformations

個々 の要素を追加することで、同じサイズの 2 つの行列を作成できます。You can add two matrices of the same size by adding individual elements. 次の図は、マトリックスの追加の 2 つの例を示します。The following illustration shows two examples of matrix addition.

変換Transformations

M × n 行列を乗算するためには、n × p 行列によってと、結果は m × p 行列。An m×n matrix can be multiplied by an n×p matrix, and the result is an m×p matrix. 1 番目の行列内の列の数は、2 番目の行列内の行の数と同じである必要があります。The number of columns in the first matrix must be the same as the number of rows in the second matrix. たとえば、4 × 2 マトリックスは、4 × 3 マトリックスを生成するために 2 × 3 行列を掛けることができます。For example, a 4×2 matrix can be multiplied by a 2×3 matrix to produce a 4×3 matrix.

平面と行およびマトリックスの列内のポイントは、ベクターと考えることができます。Points in the plane and rows and columns of a matrix can be thought of as vectors. たとえば、(2, 5) は、2 つのコンポーネントを持つベクトルと (3, 7, 1) は、3 つのコンポーネントを持つベクトル。For example, (2, 5) is a vector with two components, and (3, 7, 1) is a vector with three components. 2 つのベクトルのドット積の定義は次のとおりです。The dot product of two vectors is defined as follows:

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

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

たとえばのドット積 (2, 3) と (5, 4) は (2)(5) + (3)(4) = 22。For example, the dot product of (2, 3) and (5, 4) is (2)(5) + (3)(4) = 22. (2, 5, 1) とのドット積と (4, 3, 1) が (2)(4) + (5)(3) + (1)(1) = 24。The dot product of (2, 5, 1) and (4, 3, 1) is (2)(4) + (5)(3) + (1)(1) = 24. 2 つのベクトルのドット積は番号、別のベクトルであることに注意してください。Note that the dot product of two vectors is a number, not another vector. ドット積を計算できるは、2 つのベクトルのコンポーネントの数が同じ場合だけにも注意してください。Also note that you can calculate the dot product only if the two vectors have the same number of components.

Let A(i, j) には、i 番目の行と jth 列の行列 A にエントリがあります。Let A(i, j) be the entry in matrix A in the ith row and the jth column. たとえば、A (3, 2) の 3 番目の行と 2 番目の列の行列 A エントリです。For example A(3, 2) is the entry in matrix A in the 3rd row and the 2nd column. たとえば、A、B、および C は、マトリックス、および AB C. を =C のエントリは、次のように計算されます。Suppose A, B, and C are matrices, and AB = C. The entries of C are calculated as follows:

C (i, j) = (A の行 i) • (B の列 j)C(i, j) = (row i of A) • (column j of B)

次の図は、行列乗算のいくつかの例を示します。The following illustration shows several examples of matrix multiplication.

変換Transformations

1 x 2 行列平面上のポイントの場合は、2 × 2 の行列で乗算そのポイントを変換することができます。If you think of a point in a plane as a 1×2 matrix, you can transform that point by multiplying it by a 2×2 matrix. 次の図は、点 (2, 1) に適用されるいくつかの変換を示します。The following illustration shows several transformations applied to the point (2, 1).

変換Transformations

すべての前の図に示すように、変換は、線形変換です。All of the transformations shown in the preceding figure are linear transformations. 変換など、他の特定の変換を使用して、線形ではありません、2 × 2 の行列で乗算では表現できません。Certain other transformations, such as translation, are not linear, and cannot be expressed as multiplication by a 2×2 matrix. 場合を考えます最初に、点 (2, 1)、90 ° 回転して、x 軸方向の 3 つの単位を変換および y 方向の 4 つの単位を変換します。Suppose you want to start with the point (2, 1), rotate it 90 degrees, translate it 3 units in the x direction, and translate it 4 units in the y direction. 行列加算続けて行列乗算を使用して、これを行うことができます。You can accomplish this by using a matrix multiplication followed by a matrix addition.

変換Transformations

翻訳 (1 x 2 行列の追加) を続けて線形変換 (2 × 2 の行列で乗算) は、アフィン変換と呼ばれます。A linear transformation (multiplication by a 2×2 matrix) followed by a translation (addition of a 1×2 matrix) is called an affine transformation. マトリックス (1 つは線形) および変換用の 1 つのペアのアフィン変換を格納する代わりに 3 × 3 行列変換全体を格納を開始します。An alternative to storing an affine transformation in a pair of matrices (one for the linear part and one for the translation) is to store the entire transformation in a 3×3 matrix. この作業をするためには、平面内のポイントをダミー サード座標で 1 × 3 行列に格納する必要があります。To make this work, a point in the plane must be stored in a 1×3 matrix with a dummy 3rd coordinate. 通常の手法はすべて 3 番目の座標を 1 にします。The usual technique is to make all 3rd coordinates equal to 1. たとえば、ポイント (2, 1) は、[2 1 1] マトリックスで表されます。For example, the point (2, 1) is represented by the matrix [2 1 1]. 次の図に、アフィン変換 (90 度回転させます。 x 軸方向に 3 単位、y 方向の 4 つの単位に変換) で 1 つ 3 × 3 行列の乗算で表されます。The following illustration shows an affine transformation (rotate 90 degrees; translate 3 units in the x direction, 4 units in the y direction) expressed as multiplication by a single 3×3 matrix.

変換Transformations

前の例では、点 (2, 1) は、ポイント (2, 6) にマップされます。In the preceding example, the point (2, 1) is mapped to the point (2, 6). 3 × 3 行列の 3 番目の列に数値 0, 0, 1 が含まれていることを注意してください。Note that the third column of the 3×3 matrix contains the numbers 0, 0, 1. アフィン変換の 3 × 3 行列の場合と常になります。This will always be the case for the 3×3 matrix of an affine transformation. 重要な数値は、列 1 および 2 の 6 つの番号です。The important numbers are the six numbers in columns 1 and 2. マトリックスの左上の 2 × 2 部分は、変換の線形の一部を表し、3 番目の行の最初の 2 つのエントリが平行移動を表します。The upper-left 2×2 portion of the matrix represents the linear part of the transformation, and the first two entries in the 3rd row represent the translation.

変換Transformations

GDI+GDI+でアフィン変換を格納することができます、Matrixオブジェクト。In GDI+GDI+ you can store an affine transformation in a Matrix object. 表すアフィン変換行列の 3 番目の列は常にあるため (0, 0, 1) を構築するとき、最初の 2 つの列で 6 つの数字のみを指定する、Matrixオブジェクト。Because the third column of a matrix that represents an affine transformation is always (0, 0, 1), you specify only the six numbers in the first two columns when you construct a Matrix object. ステートメントMatrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4)前の図に示すように、マトリックスを構築します。The statement Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) constructs the matrix shown in the preceding figure.

複合変換Composite Transformations

複合変換とは、変換後、その他の 1 つのシーケンスです。A composite transformation is a sequence of transformations, one followed by the other. マトリックスおよび次の一覧内の変換を考慮してください。Consider the matrices and transformations in the following list:

行列 AMatrix A 90 度回転します。Rotate 90 degrees
マトリックス BMatrix B X 軸方向の 2 倍の拡大縮小します。Scale by a factor of 2 in the x direction
マトリックス CMatrix C Y 方向の 3 つの単位に変換します。Translate 3 units in the y direction

かどうかはまず、点 (2, 1): [2 1 1] マトリックスで表される — しを a、B、C、点 (2, 1) が使用される順番で 3 つの変換し、します。If we start with the point (2, 1) — represented by the matrix [2 1 1] — and multiply by A, then B, then C, the point (2, 1) will undergo the three transformations in the order listed.

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

はなく 3 つの独立した行列に複合変換の 3 つの部分を格納は、A を掛けることができますを複合変換全体を格納する 1 つの 3 倍 3 行列を取得するには、同時に、B、および C です。Rather than store the three parts of the composite transformation in three separate matrices, you can multiply A, B, and C together to get a single 3×3 matrix that stores the entire composite transformation. たとえば、ABC D. を =D を掛けたポイントが A、B、C を掛けたポイントと同じ結果を提供し、Suppose ABC = D. Then a point multiplied by D gives the same result as a point multiplied by A, then B, then C.

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

次の図に、A、B、C および D のマトリックスThe following illustration shows the matrices A, B, C, and D.

変換Transformations

複合変換の行列を個々 の変換行列を乗算することによって作成できますが、ファクトは 1 つのアフィン変換の任意のシーケンスを格納できることを意味Matrixオブジェクト。The fact that the matrix of a composite transformation can be formed by multiplying the individual transformation matrices means that any sequence of affine transformations can be stored in a single Matrix object.

注意事項

複合変換の順序が重要です。The order of a composite transformation is important. 一般に、回転してから、スケールを設定し、変換が同じではありません、スケーリング、回転、しに変換します。In general, rotate, then scale, then translate is not the same as scale, then rotate, then translate. 同様に、行列乗算の順序が重要です。Similarly, the order of matrix multiplication is important. 一般に、ABC はいない BAC と同じです。In general, ABC is not the same as BAC.

Matrixクラスが複合変換を作成するためのいくつかのメソッドを提供します。 MultiplyRotateRotateAtScaleShear、およびTranslateです。The Matrix class provides several methods for building a composite transformation: Multiply, Rotate, RotateAt, Scale, Shear, and Translate. 次の例では、回転角度 (30) し、y 方向の 2 倍のスケールを設定し、x 軸方向に 5 単位に変換する複合変換の行列を作成します。The following example creates the matrix of a composite transformation that first rotates 30 degrees, then scales by a factor of 2 in the y direction, and then translates 5 units in the x direction:

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)

次の図は、マトリックスを示します。The following illustration shows the matrix.

変換Transformations

関連項目See Also

座標系と変換Coordinate Systems and Transformations
マネージ GDI+ での変換の使用Using Transformations in Managed GDI+