Math 与向量*矩阵相比,矩阵*向量意味着什么

Math 与向量*矩阵相比,矩阵*向量意味着什么,math,3d,directx,matrix,xna,Math,3d,Directx,Matrix,Xna,如果我执行positionVector*worldMatrix操作,位置将转换为世界空间。 但是如果我用另一种方式(worldMatrix*positionVector)在3d空间中做,会发生什么呢 我注意到结果与第一个不同。我已经在谷歌上搜索了矩阵,数学,他们解释了很多,但不是这一个,至少我找不到它。在matrixvector中,你的向量将被解释为列向量。在vectormatrix中,它将被解释为行向量。2x2个示例: / a b \ / e \ / ae+bf \ | | *

如果我执行
positionVector*worldMatrix
操作,位置将转换为世界空间。 但是如果我用另一种方式(
worldMatrix*positionVector
)在3d空间中做,会发生什么呢

我注意到结果与第一个不同。我已经在谷歌上搜索了矩阵,数学,他们解释了很多,但不是这一个,至少我找不到它。

在matrixvector中,你的向量将被解释为列向量。在vectormatrix中,它将被解释为行向量。2x2个示例:

/ a b \   / e \   / ae+bf \
|     | * |   | = |       |
\ c d /   \ f /   \ ce+df /

          / a b \
( e f ) * |     | = ( ea+fc eb+fd )
          \ c d /
正如你所看到的,结果是不同的

顺便说一句,在转置矩阵后执行一个与执行另一个相同

在3D空间中,如果你认为这两个选项中的一个是线性变换,我不知道是否有另一个有意义的解释。说了一些关于它的事情,但它超出了我对线性代数的理解。

(矩阵*向量)等同于(向量*转置(矩阵))

矩阵数学规则:

给定矩阵AB,大小为MxN和OxP

  • 矩阵积A*B仅在N=O时定义
  • 结果将是一个大小为MxP的矩阵
另一个重要的规则是矩阵乘法不是可交换的A*B!=B*A

通常在计算机图形学中,位置向量为4x1矩阵,世界视图矩阵为正方形4x4。因此,您应该期望世界视图矩阵与位置向量的预乘是未定义的。将世界视图矩阵应用于位置向量的正确方法是按另一个顺序,将位置向量与世界视图矩阵相乘。(我在这里讲数学)


要获得矩阵数学的更多乐趣,请查看此项。

正如其他人所指出的那样-交换乘法顺序相当于乘以转置。碰巧,旋转矩阵是一种特殊类型的矩阵,我们称之为旋转矩阵,它为您提供了许多简洁的属性

最有趣的可能是矩阵的转置是它的逆矩阵。对于您的世界变换,将变换乘以逆相当于在世界空间中获取一个位置,并将其拉入与变换关联的对象的局部坐标中


作为一个例子,考虑一个在世界上任意定向的盒子——乘以逆世界变换(可以完全依赖于:当然)将你放在一个轴对齐的空间中,如果您对寻找与其他对象的碰撞感兴趣,在长方体的局部空间中进行计算会更容易。

您是说反转(mat)与转置(mat)相同吗?我找不到任何证据证明这一点,因为这与我的学校知识相矛盾。一般来说,转置与反转不同。这是正交矩阵的一个特定属性(请查看我回复中的链接了解更多详细信息),所有旋转和反射矩阵都是正交矩阵。感谢链接,但在HLSL(着色器语言)中,有一个函数mul(mat,vec)和mul(vec,mat)。在一种情况下,vec被解释为列向量,而在另一种情况下,它被解释为行向量。是的,任何好的图形库/语言都应该有一个函数来为您实现这一点,但了解该函数中的内容非常有用。