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
答案 0 :(得分:2)
The documentation解释了默认的乘法顺序是 prepend 给定的矩阵。因此,你的最后一次乘法实际上是这样的:
[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
作为第二个参数。