矩阵和向量的乘法顺序
2009-03-12 13:04
344 查看
矩阵和向量的乘法顺序
似乎经常有人被这个问题转晕。向量有两种表达形式,行向量和列向量,对应的矩阵也有行矩阵和列矩阵。采用哪种形式和左右手系无关。
行矩阵:
三个轴向量为前三行,最后一行为位移变换
连乘时从左到右接合,左边的变换先应用
变换向量时为vector * matrix
列矩阵:
三个轴向量为前三列,最后一列为位移变换
连乘时从右到左接合,右边的变换先应用,注意这和*运算符的接合顺序相反
变换向量时为matrix * vector
DirectX采用了行矩阵,OpenGL采用了列矩阵,而基于OpenGL的OpenInventor却采用了行矩阵。图形学的书籍多使用列矩阵和列向量,或许是学术上的传统,或许是节省版面的原因;而不少图形库选择了行矩阵是因为行矩阵在现有的内存架构上效率要略高于列矩阵。另外,行矩阵的接合顺序和*运算符是一致的,这一点非常适合运算符重载。
而四元数则不同,在数学上,四元数的乘法只有从右到左接合定义。DirectX里为了四元数也能和行矩阵的接合顺序一致,也特意颠倒了四元数的乘法顺序,使四元数也能符合*运算符的接合顺序。WPF、XNA都采用了右手系、行矩阵,然而决定让四元数恢复它的本来模式。如此,四元数必须独立看待。
似乎经常有人被这个问题转晕。向量有两种表达形式,行向量和列向量,对应的矩阵也有行矩阵和列矩阵。采用哪种形式和左右手系无关。
行矩阵:
三个轴向量为前三行,最后一行为位移变换
连乘时从左到右接合,左边的变换先应用
变换向量时为vector * matrix
列矩阵:
三个轴向量为前三列,最后一列为位移变换
连乘时从右到左接合,右边的变换先应用,注意这和*运算符的接合顺序相反
变换向量时为matrix * vector
DirectX采用了行矩阵,OpenGL采用了列矩阵,而基于OpenGL的OpenInventor却采用了行矩阵。图形学的书籍多使用列矩阵和列向量,或许是学术上的传统,或许是节省版面的原因;而不少图形库选择了行矩阵是因为行矩阵在现有的内存架构上效率要略高于列矩阵。另外,行矩阵的接合顺序和*运算符是一致的,这一点非常适合运算符重载。
而四元数则不同,在数学上,四元数的乘法只有从右到左接合定义。DirectX里为了四元数也能和行矩阵的接合顺序一致,也特意颠倒了四元数的乘法顺序,使四元数也能符合*运算符的接合顺序。WPF、XNA都采用了右手系、行矩阵,然而决定让四元数恢复它的本来模式。如此,四元数必须独立看待。
相关文章推荐
- 【转】矩阵和向量的乘法顺序
- 矩阵和向量的乘法顺序
- [zt]矩阵和向量的乘法顺序
- 线性空间的向量组与数量矩阵的乘法
- MPI矩阵与向量乘法
- Python 矩阵与矩阵以及矩阵与向量的乘法
- 列向量和行向量看待矩阵乘法
- 向量、矩阵乘法的几何意义(一) scalar multiplication VS scalar product
- numpy矩阵与向量类型的向量乘法
- 动态规划--矩阵连乘的最优乘法顺序
- bzoj 3243: [Noi2013]向量内积 矩阵乘法
- OpenMP编程实例(向量点积、矩阵乘法和快排)
- 关于用mapreduce做kmeans聚类以及python的numpy和list做矩阵、向量乘法的速度对比
- 一个简单的MATLAB读写文本文件程序--稀疏矩阵向量乘法
- CUDA编程入门:向量加法和矩阵乘法
- 动态规划算法——矩阵乘法的顺序安排
- 独立事件、笛卡尔积与矩阵向量乘法
- 【MPI】矩阵向量乘法
- 矩阵链乘法确定矩阵的最佳计算顺序
- 一些算法的MapReduce实现——矩阵-向量乘法实现