矩阵.在System.Drawing中进行乘法.Drawing2D工作. .不同

本文关键字:Drawing2D 工作 不同 System Drawing 矩阵 | 更新日期: 2023-09-27 18:12:36

Matrix matrix1 = new Matrix(1, 0, 0, 1, 0, 0);
matrix1.Multiply(new Matrix(1, 0, 0, 1, 100, 200));
matrix1.Elements.ToList().ForEach(f => Console.Write(f + " "));
Console.WriteLine();
matrix1.Multiply(new Matrix(2, 0, 0, 2, 0, 0));
matrix1.Elements.ToList().ForEach(f => Console.Write(f + " "));
Console.WriteLine();
Console.ReadKey();

为了记录,由于矩阵的最后一列总是等于(0,0,1),因此Matrix2D中的矩阵存储为(m11 m12 m21 m22 offsetx offsety)

据我所知,矩阵乘法的工作原理如下:

[1   0   0]   [2 0 0]   [2   0   0]
[0   1   0] * [0 2 0] = [0   2   0]
[100 200 1]   [0 0 1]   [200 400 1]

那么谁能解释一下这个程序的结果呢?

1 0 0 1 100 200
2 0 0 2 100 200

矩阵.在System.Drawing中进行乘法.Drawing2D工作. .不同

文档解释了默认的乘法顺序是在前面加上给定的矩阵。因此,最后一次乘法实际上是这样的:

[2 0 0]   [1   0   0]    [2   0   0]
[0 2 0] * [0   1   0]  = [0   2   0]
[0 0 1]   [100 200 1]    [100 200 1]

因此,反过来,打印的控制台结果是正确的。

要达到预期的结果,您可以使用Matrix.Multiply Method (Matrix, MatrixOrder)过载并将MatrixOrder.Append作为第二个参数。