矩阵结构给出错误的输出

Vec*_*boy 3 c# vector matrix

在.Net Framework 4.6.2(及更低版本)中,名称空间中存在该Matrix4x4结构System.Numerics。该结构具有Translation明显用于存储翻译部分的属性。但是,使用此属性时,它将值存储在最后一行

例:

var test = Matrix4x4.CreateTranslation(new Vector3(1, 2, 3));
Run Code Online (Sandbox Code Playgroud)

产生以下矩阵:

1,0,0,0

0、1、0、0

0、0、1、0

1 2 3 1

但这应该是

1,0,0,1

0、1、0、2

0、0、1、3

0,0,0,1

在我看来。

这是一个错误还是我完全错了?

kol*_*kol 5

因为System.Numerics定义向量,所以转换矩阵是“转置的” :

对于矩阵变换,将Vector2,Vector3和Vector4实例表示为行:向量v由具有vM乘法的矩阵M变换。

来源

数学如下:

            / 1 0 0 0 \
[a b c 1] * | 0 1 0 0 | = [a+A b+B c+C 1]
            | 0 0 1 0 |
            \ A B C 1 /
Run Code Online (Sandbox Code Playgroud)