矩阵和向量的乘法顺序

似乎经常有人被这个问题转晕。向量有两种表达形式,行向量和列向量,对应的矩阵也有行矩阵和列矩阵。采用哪种形式和左右手系无关。

行矩阵:
    三个轴向量为前三行,最后一行为位移变换
    连乘时从左到右接合,左边的变换先应用
    变换向量时为vector * matrix
列矩阵:
    三个轴向量为前三列,最后一列为位移变换
    连乘时从右到左接合,右边的变换先应用,注意这和*运算符的接合顺序相反
    变换向量时为matrix * vector

DirectX采用了行矩阵,OpenGL采用了列矩阵,而基于OpenGL的OpenInventor却采用了行矩阵。图形学的书籍多使用列矩阵和列向量,或许是学术上的传统,或许是节省版面的原因;而不少图形库选择了行矩阵是因为行矩阵在现有的内存架构上效率要略高于列矩阵。另外,行矩阵的接合顺序和*运算符是一致的,这一点非常适合运算符重载。

而四元数则不同,在数学上,四元数的乘法只有从右到左接合定义。DirectX里为了四元数也能和行矩阵的接合顺序一致,也特意颠倒了四元数的乘法顺序,使四元数也能符合*运算符的接合顺序。WPF、XNA都采用了右手系、行矩阵,然而决定让四元数恢复它的本来模式。如此,四元数必须独立看待。

原文地址:https://www.cnblogs.com/ceerqingting/p/12419377.html

时间: 2024-11-04 00:59:58

矩阵和向量的乘法顺序的相关文章

1.2 eigen中矩阵和向量的运算

1.2 矩阵和向量的运算 1.介绍 eigen给矩阵和向量的算术运算提供重载的c++算术运算符例如+,-,*或这一些点乘dot(),叉乘cross()等等.对于矩阵类(矩阵和向量,之后统称为矩阵类),算术运算只重载线性代数的运算.例如matrix1*matrix2表示矩阵的乘法,同时向量+标量是不允许的!如果你想进行所有的数组算术运算,请看下一节! 2.加减法 因为eigen库无法自动进行类型转换,因此矩阵类的加减法必须是两个同类型同维度的矩阵类相加减. 这些运算有: 双目运算符:+,a+b 双

动态规划 - 矩阵链的乘法问题

1.1具体实例 1.2子问题的划分和递推方程 2.动态规划算法的递归实现 3.动态规划算法的迭代实现 4.动态规划算法的要素 这里用矩阵链的乘法问题来说明动态规划算法的设计要素. \(A_1,A_2,..,A_n\)表示\(n\)个矩阵的序列,其中\(A_i\)为\(P_{i-1} \times P_i\)阶矩阵,\(i=1,2,...,n\). 向量\(P=<P_0,P_1,P_2..P_i>\)表示矩阵链的输入,其中\(P_0\)是\(A_1\)的行数,\(P_1\)是\(A_1\)的列数

从零单排入门机器学习:Octave/matlab的常用知识之矩阵和向量

Octave/matlab的常用知识之矩阵和向量 之前一段时间在coursera看了Andrew ng的机器学习的课程,感觉还不错,算是入门了.这次打算以该课程的作业为主线,对机器学习基本知识做一下总结.小弟才学疏浅,如有错误,敬请指导. Andrew的课程选了Octave/matlab为编程语言.他选择这个估计更多是考虑大众性,这门语言容易入门. 然后我觉得学会使用Octave/matlab还是挺有用的.一来是她天生是个数学工具,开始的研究阶段使用她最方便莫属,注意我这里所说的是研究阶段,商用

matlab获取矩阵和向量长度length和size

matlab获取矩阵和向量长度length和size 觉得有用的话,欢迎一起讨论相互学习~ 概论 size:获取数组的行数和列数 length:数组长度(即行数或列数中的较大值) numel:元素总数. size() s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数. [r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量. 如果在size函数的输入参数中再添

IOS中的矩阵和向量运算

为工程添加引入库文件Accelerate.framework 然后再要进行计算的swift文件中 import Accelerate 一.向量和常数运算 函数形式 vDSP_vs***D(vector, 1, &scalar, &result, 1, length_of_vector) 这里的1代表对所有向量元素进行操作,如果是2,则每隔一个进行操作.绝大部分情况是1. 具体实例 1.向量和常数相加 <pre name="code" class="pla

hdu 2604 Queuing(矩阵快速幂乘法)

Problem Description Queues and Priority Queues are data structures which are known to most computer scientists. The Queue occurs often in our daily life. There are many people lined up at the lunch time. Now we define that ‘f’ is short for female and

hdu 4686 Arc of Dream(矩阵快速幂乘法)

Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai = ai-1*AX+AY b0 = B0 bi = bi-1*BX+BY What is the value of AoD(N) modulo 1,000,000,007? Input There are multiple test cases. Process to the End of File. Eac

矩阵和向量

奇异值分解(SVD) 对于任意一个m*n的实数矩阵 A,都存在m*m的正交矩阵U和n*n的正交矩阵V,以及m*n的对角矩阵 D=diag(d_1,d_2,...,d_r),使得A = UDV', 其中,d_1 >= d_2 >= ... >= d_r >= 0 称为奇异值,U和V的各列分别称为左奇异向量和右奇异向量. 如果是完全SVD分解,那D对角线上非零元的个数就是这个矩阵的秩(这些对角线元素叫做奇异值),还有些零元,这些零元对秩没有贡献. 矩阵的秩 组成矩阵的各向量之间的最大线

hdu 1575 Tr A(矩阵快速幂乘法优化算法)

Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据.接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容. Output 对应每组数据,输出Tr(A^k)%9973. Sample Input 2 2 2 1 0 0 1 3 99999