精华内容
下载资源
问答
  • 齐次坐标 1. 向量 1.1 点乘 两个n维向量点乘: 二维向量的点乘:向量的模长相乘再乘以夹角余弦值。 点乘的结果是一个数值(标量)。 几何意义:b向量再a向量上的投影长度。 1.2 叉乘 结果:是...

    1. 向量

    1.1 点乘

    两个n维向量点乘:

    二维向量的点乘:向量的模长相乘再乘以夹角余弦值。

    • 点乘的结果是一个数值(标量)。
    • 几何意义:b向量再a向量上的投影长度。

    1.2 叉乘

    • 结果:是一个向量(矢量)。
    • 几何意义:向量a和向量b叉乘的得到的向量是同时垂直于向量a和向量b的向量。

    2. 矩阵

    2.1 矩阵乘法

    n维矩阵的乘法运算。

    举例:

    3. 齐次坐标

    • 齐次坐标就是图形变换过程中为了方便计算产生的概念。齐次坐标是将一个原本是n维的向量用一个n+1维向量来表示。

    • 例如:二维点(x,y)的齐次坐标表示为(hx,hy,h)。由此可以看出,一个点的齐次表示是不唯一的,齐次坐标的h取不同的值都表示的是同一个点,比如齐次坐标(8,4,2)、(4,2,1)表示的都是二维点(4,2)。

    • 向量的w分量也叫齐次坐标。想要从齐次向量得到3D向量,我们可以把x、y和z坐标分别除以w坐标。我们通常不会注意这个问题,因为w分量通常是1.0。

    • 如果一个向量的齐次坐标是0,这个坐标就是方向向量(Direction Vector),因为w坐标是0,这个向量就不能位移(译注:这也就是我们说的不能位移一个方向)。 它可以理解为一个无穷远的点。n+1维的齐次坐标中如果h=0,实际上就表示了n维空间的一个无穷远点。

    • 使用齐次坐标有几点好处:它允许我们在3D向量上进行位移(如果没有w分量我们是不能位移向量的)

    展开全文
  • 对于齐次变换矩阵之间的相乘,我们以三个坐标系之间的变换关系为例: 是{C}在{A}中的描述,是{B}在{A}中的描述,是{C}在{B}中的描述。 对于坐标系之间的运动过程,我们可以做如下理解: (1) 第一步:{C}相...

    对于齐次变换矩阵之间的相乘,我们以三个坐标系之间的变换关系为例:

    ^A_CT=^A_BT^B_CT

            ^A_CT是{C}在{A}中的描述,^A_BT是{B}在{A}中的描述,^B_CT是{C}在{B}中的描述。

    对于坐标系之间的运动过程,我们可以做如下两种理解:

    (1)从右往左乘

            第一步:{C}相对于{A}或者说是{B}做变换^B_CT;

            第二步:{B}{C}再一起(固接)相对{A}系做变换^A_BT

    物理意义:相对固定坐标系先后发生的若干运动合成(从右往左乘)

    (2)从左往右乘

            第一步:{B}{C}一起相对B系作运动^A_BT

            第二步:{C}再相对于{B}系作运动^B_CT

    物理意义:相对运动坐标系先后发生的若干运动系得合成(从左向右乘)

            在这里,我们对一个目标位置,使用两种运动不同得先后运动顺序来获得,也就说已知目标位置的情况下,我们逆向推导运动顺序。

            若我们已知运动的先后作用次序,那么我们就只能使用(1)或者(2)中的一种矩阵相乘顺序来获得最终位置。

    此部分参考

    1.东南大学-机器人原理

    2.燕山大学-机器人技术

     

     

    展开全文
  • 矩阵相乘-C++代码实现

    2020-11-18 11:15:17
    #include #include using namespace std; vector > multi(vector > &ve1, vector > &ve2){ int m = ve1.size(),n=ve2.size(), k = ve2[0].size(); vector > ve(m,vector(k ,0) ) ;... } 实现两个矩阵m*n,n*k相乘
    #include<iostream>
    #include<vector>
    using namespace std;
    
    vector<vector<int> >  multi(vector<vector<int> > &ve1, vector<vector<int> > &ve2){
    	int m = ve1.size(),n=ve2.size(), k = ve2[0].size();
    	vector<vector<int> > ve(m,vector<int>(k ,0) ) ;
    	
    	for (int i = 0; i < m; ++i)
    	for (int j = 0; j < k; ++j){
    		int temp = 0;
    		for (int q = 0; q < n; ++q){
    			
    			temp += ve1[i][q] * ve2[q][j];
    		}
    		ve[i][j] = temp;
    	}
    	return ve;
    }
    int main(){
    	int m, n, k;
    	cin >> m >> n >>k;  //m*n  *  n*k两个矩阵
    	vector<vector<int> >  ve1(m, vector<int>(n));
    	for (int i = 0; i < m;++i)
    	for (int j = 0; j < n; ++j)
    		cin >> ve1[i][j];
    	vector<vector<int> >  ve2(n, vector<int>(k));
    	for (int i = 0; i < n; ++i)
    	for (int j = 0; j < k; ++j)
    		cin >> ve2[i][j];
    	vector<vector<int> > ve;
    	ve = multi(ve1, ve2);
    	int p = ve.size(), q = ve[0].size();
    	for (int i = 0; i < p; ++i){
    		for (int j = 0; j < q; ++j){
    			cout << ve[i][j] << ' ';
    		}
    		cout << endl;
    	}
    	system("pause");
    	return 0;
    }

    实现两个矩阵m*n,n*k相乘。

    展开全文
  • 5. 机器人正运动学---齐次变换矩阵

    千次阅读 多人点赞 2019-12-31 23:04:14
    这篇文章主要介绍了齐次变换矩阵的由来以及它的逆。

    目录

     

    1. 引言

    2. 齐次坐标系变换

    2.1 坐标系之间的位姿关系

    2.2 齐次变换矩阵

    2.3 齐次变换矩阵的逆

    4. 总结


    1. 引言

    前面的文章中我们分别讨论了坐标系及其平移,旋转两种变换。但是到目前为止我们一直都在分开讨论平移和旋转,而在实际应用中两个坐标系之间的关系往往既有平移又有旋转,因此这篇文章我们将讨论一下如何以一种更为紧凑的方式来表达两个坐标系之间的位置及姿态关系。

    2. 齐次坐标系变换

    我们可以把这个问题分解开来看,详细说来就是当我们无法一下看出两个坐标系{A}和{B}的变换关系时,可以尝试在这两个坐标系之间插入一个中间坐标系{C},只要我们找到了坐标系{A}和{C}的关系,然后又找到了坐标系{C}和{B}的关系,那么我们就可以间接确定{A}和{B}之间的关系。

    2.1 坐标系之间的位姿关系

    如下图所示,坐标系{A}经过平移变换可以得到坐标系{C},坐标系{C}绕其自身z轴旋转可以得到坐标系{B}。根据我们在机器人正运动学---坐标系及其变换中提到的方法,我们可以很容易的确定坐标系{A}与{C}之间的关系可以表达为:

                                                                                         p_{M}^{A}=p_{M}^{C}+p_{Corg}^{A} (1)

    我们来解释一下这个等式的含义。等式的左侧是空间中任意一点M在坐标系{A}中的坐标;等式右侧p_{M}^{C}代表点M在坐标系{C}中的坐标;p_{Corg}^{A}代表坐标系C的原点Corg(the origin of axis {C})在坐标系{A}中的坐标。

    考虑完了坐标系{A}和{C}之间的平移关系,接下来我们讨论坐标系{B}和{C}之间的旋转关系,前面我们已经叙述了坐标系{B}的由来,它是坐标系{C}沿着其z轴旋转一个角度\theta而来。因此,按照上一篇文章机器人正运动学---理解变换矩阵中提到的方法,将坐标系{B}的各轴单位矢量在坐标系{C}下投影即可得到坐标系{B}与坐标系{C}的姿态变换关系,如下式所示:

                                                                                    p_{M}^{C}= ^{C}\textrm{R}_{B} \cdot P_{M}^{B} (2)

                                                                          ^{C}\textrm{R}_{B}=\begin{bmatrix} cos\theta & -sin\theta & 0\\ sin\theta & cos\theta & 0\\ 0 & 0 & 1 \end{bmatrix}

    旋转矩阵^{C}\textrm{R}_{B}的各列分别是坐标系{B}三个坐标轴单位矢量在坐标系{C}三个轴上的投影。我们再来解释一下上述坐标变换等式的含义,左侧代表空间点M在坐标系{C}中的坐标;等式右侧^{C}\textrm{R}_{B}为坐标系{B}和{C}之间的变换关系;p_{M}^{B}代表点M在坐标系{B}中的坐标。

    接下来问题来了,有了坐标系{A}和{C}的关系,也有了坐标系{B}和{C}的关系,我们如何得到坐标系{A}和{B}之间的变换呢?其实很简单,可以从两种角度去思考,第一个是从变换的角度,假设空间一点M在坐标系{B}中坐标已知,为p_{M}^{B}。那么通过坐标系{B}和{C}的变换关系(等式(2)),我们就可以得到点M在坐标系{C}下的坐标为p_{M}^{C},而我们又知道坐标系{A}和坐标系{C}之间的关系(等式(1)),因此我们可以最终得到点M在坐标系{A}中的坐标p_{M}^{A}第二个是从数学的角度,说白了就是将等式(2)代入到等式(1)就可以得到坐标系{A}和{B}之间的关系。这个关系可以用下式表示:

                                                                              p_{M}^{A}=^{A}\textrm{R}_{B} \cdot P_{M}^{B}+p_{Borg}^{A} (3)

    注意由于坐标系{B}和{C}原点是重合的,因此p_{Borg}^{A}=p_{Corg}^{A},又因为坐标系{A}和{C}各个轴分别平行,因此^{A}\textrm{R}_{B}=^{C}\textrm{R}_{B}

    2.2 齐次变换矩阵

    在2.1节我们得出了任意两个坐标系之间的位姿关系描述,但是这种描述其实是不够紧凑的,特别是当我们面对多重连续变换时,等式会变得很臃肿。为了解决这个问题,我们在原有旋转矩阵的基础上扩展一维用于容纳平移关系。得到最终的齐次变换矩阵,这样任意两个坐标系{A}和{B}的位姿关系可以重新形式化为:

                                                                                   \begin{bmatrix} p_{M}^{A}\\ 1 \end{bmatrix}=^{A}\textrm{T}_{B} \cdot \begin{bmatrix} P_{M}^{B}\\ 1 \end{bmatrix} (4)

                                                                                ^{A}\textrm{T}_{B}=\begin{bmatrix} ^{A}\textrm{R}_{B} & p_{Borg}^{A}\\ 0 & 1 \end{bmatrix}

    如果你大致理解什么是分块矩阵就会发现其实等式(4)和等式(3)是完全等价的。

    2.3 齐次变换矩阵的逆

    齐次变换矩阵的逆表达式为:

                                                                         ^{B}\textrm{T}_{A}=\begin{bmatrix} ^{B}\textrm{R}_{A} & -^{B}\textrm{R}_{A}\cdot p_{Borg}^{A}\\ 0 & 1 \end{bmatrix}

    当你充分理解了齐次变换矩阵的本质后,它的逆是可以直接写出来的,无需特别记忆,但是在本篇文章我们暂不讨论它的由来,而是把它留到下一篇文章和齐次变换矩阵的用途一起讨论,因为他们之间的关系才更密切一些。

    4. 总结

    这篇文章主要介绍了齐次变换的由来,下一篇文章我们将讨论齐次变换矩阵的几个用途,这样你就不会为变换矩阵乘的顺序等一系列问题而感到烦恼了。由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。

    下一篇:6. 机器人正运动学---齐次变换矩阵的三种解读

    展开全文
  • 齐次变换矩阵及其运算 由于各种原因,变换矩阵应该写成方型形式,33或者44即可。 为保证所表示的矩阵为方阵,如果在同一矩阵中既表示姿态又表示位置,那么在矩阵中加入比例因子使之成为4*4的矩阵即可。 变换可以...
  • 6. 机器人正运动学---齐次变换矩阵的三种解读

    千次阅读 多人点赞 2020-02-13 23:27:54
    这篇文章介绍了我们可以从三个不同的角度理解齐次变换矩阵。利用这三种解读可以帮助我们轻松地去理解一些齐次变换过程,特别是齐次变换矩阵的乘法顺序问题。
  • 代码实现两矩阵相乘 伪代码 c++代码 #include #include using namespace std; /*此程序两个矩阵均为行列相同的方阵*/ void matrixMultiply(int a[2][2],int b[2][2],int c[2][2]); int main() { int A[2][2]=...
  • 小虎曾经在机器人学课堂上问过老师,老师含糊其词,想拿上面那句话唬我狂小虎,说这是线性代数的知识,但是小虎上的线性代数课也只给出“矩阵和矩阵相乘不满足乘法交换律(cummutative property)”的结论。
  • 矩阵乘法的几何意义

    千次阅读 2019-04-20 10:56:29
    两个矩阵相乘,实际上就是切换坐标系,这样做可以使得矩阵代表的图形或3维模型进行拉伸、旋转和平移处理。 如A是一个2048x3的矩阵,B是一个3x3的矩阵,A和B相乘j就是将B的列向量作为新的基向量对A的行向量的表达。 ...
  • 4*4(齐次矩阵

    千次阅读 2019-10-08 03:26:44
    4*4矩阵一般也叫齐次矩阵,主要有两个作用,描述平移变换,描述透视投影变换 4*4平移矩阵 3*3矩阵可以用来旋转,缩放坐标系,但不能移动坐标系 需要在4维空间切变实现3维平移(比较容易理解的是在3维空间实现2维平移...
  • 缩放 矩阵缩放 该对角阵称为缩放矩阵 对称 切变 选择 齐次坐标 平移变换 向量平移不变性 两个点的中点
  • 都知道旋转矩阵表达的是刚体(坐标系{B})相对参考坐标系{A}的姿态信息,那如何利用已知的旋转矩阵,将{A}旋转一定角度变成与{B}一样的姿态呢?有几种方法:固定角旋转、欧拉角旋转、angle-axis表达法、Quaternion...
  • 1.什么是齐次矩阵 2.齐次矩阵在透视投影上的运用 1.什么是齐次矩阵 01.齐次空间 所谓齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。例如,二维点(x,y)的齐次坐标表示为(hx,hy,h)。由此可以看出,一...
  • 四元数 四元数(quaternion)可以看作中学时学的复数的扩充,它有三个虚部。形式如下: 四元数(quaternion)可以看作中学时学的复数的扩充,它有三个虚部。形式如下: ...4*4变换矩阵 四元数到4*4矩阵 ...
  • OpenGL中的矩阵相乘的顺序 (转)

    千次阅读 2014-02-17 09:15:34
    1,在OpenGL中所有的视图变换,模型变换 都是4×4矩阵,每个后续的glMultiMatrix*(N),或者变换函数,glTranslate*(),glRotate*(),等都是把一个新的4×4矩阵与当前的矩阵M相乘,不同的是:变换函数glTranslate*(),glRo
  • halcon矩阵运算

    千次阅读 2017-08-03 09:31:21
    * X0:=[1.2,1.2,3.1,4.3,5.2,6.4] X1:=[2.2,2.44,3.2,4.15,5.00,6.1] X2:=[1.4,2.5,3.3,4.35,5.1,6.2] X3:=[1.45,2.37,3.12,4.44,5.2,6.33] X4:=[1.56,2.78,3.1,4.56,5.3,6.44] X5:=[1.56,2.5,3.23,4.78 ,5.4,6.55]
  •   对于学习数字图像处理的新手来说,一般图像处理相关的书籍都没有具体说明数字图像本来是用二维坐标 (x,y) 表示的,为什么进行图像变换时就要用齐次坐标 (x,y,1) 表示了呢?   答案很简单,就是为了简便运算,...
  • 文章目录点在坐标系下的定位3x3扩展4x4添加偏移量齐次坐标缩放矩阵旋转矩阵在 Shader 中实现一些旋转旋转顶点运行效果旋转纹理 UV运行效果总结References LearnGL - 学习笔记目录 本人才疏学浅,如有什么错误,望不...
  • 矩阵相乘

    2021-04-09 12:34:20
    #include<iostream> #include<iomanip> using namespace std; int cul() { const int a = 3, b = 3, c = 3... "请按行输入3*3的矩阵A的元素:" << endl; for (int i = 0;i < 3; i++) { fo...
  • 1,在OpenGL中所有的视图变换,模型变换 都是4×4矩阵,每个后续的glMultiMatrix*(N),或者变换函数,glTranslate*(),glRotate*(),等都是把一个新的4×4矩阵与当前的矩阵M相乘,不同的是:变换函数glTranslate*(),gl
  • 2019/10/22 2.1 位置的表示方法 几何推理的方法:合成方法、分析方法。 点在坐标系的表示: ...二维空间中,坐标系o1x1y1的各轴线(单位向量)被投影到坐标系o0x0y0(参考坐标系),旋转矩阵: ...
  • 为什么要引入齐次坐标,齐次坐标的意义(二)

    万次阅读 多人点赞 2019-07-09 20:10:05
    前面我们提到了图像的缩放变换和旋转变换,可以用矩阵乘法的形式来表达变换后的像素位置映射关系。 那么,对于平移变换呢?平移变换表示的是位置变化的概念。如下图所示,一个图像矩形从中心点[x1,y1]平移到了中心...
  • 3.用变换齐次矩阵的逆矩阵与归一化后的齐次坐标相乘(注意我们是用归一化后的齐次坐标,不是上面第一步变换后的齐次坐标),的到还原后的齐次矩阵,其w分量将会有一个特殊的值, 4.如果将还原后的齐次矩阵使用其w...
  • 齐次坐标主要是应用在矩阵转换中,我们通常运算的坐标系是“笛卡尔坐标系”,我们已经习惯了笛卡尔坐标系的表述方式,一个点都有唯一对应的数据值来表示,比如原点我们就记做(0,0)点。而笛卡尔坐标系和齐次坐标系的...
  • 1.关于坐标变换的简单介绍 我们利用矩阵表示位置,用于对空间中的物体...齐次坐标提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。 对于齐次坐标的变换我们可...
  • 齐次坐标变换

    万次阅读 多人点赞 2018-01-24 18:15:17
    齐次坐标 在二维平面内,我们用一对坐标值(x,y)来表示一个点在平面内的确切位置,或者说是用一个向量(x,y)来标定一个点的位置。 假如变换前的点的坐标为(x,y),变换后的点坐标为(x*,y *),这个变换过程...
  • 在前面我们说到关于矩阵的一些计算知识,相信大家已经觉得进入了水深火热之中了,那么为了让大家感到更加刺激的视觉体验和感官体验,这一篇博客,我将对矩阵的行列式,矩阵的逆,正交矩阵,齐次矩阵进行探讨研究整理....
  • 如果将2x2矩阵表达式扩充为3x3矩阵,就可以...标准的实现技术是将二维坐标位置表示(x,y)扩充到三维表示(xh,yh, h),称为齐次坐标(homogeneous coordinate),这里的齐次参数(homogeneous parameter)h是一个非零值
  • 1.1 应用领域 最优化问题:最小二乘问题 (求取最小二乘解的方法一般使用SVD) 统计分析:信号与图像处理 求解线性方程组:Ax=0或Ax=b ...1.2 矩阵是什么 矩阵是什么取决于应用场景 矩阵可以是: 只是一...
  • OpenGL中的矩阵相乘的顺序

    万次阅读 2008-04-24 21:41:00
    1,在OpenGL中所有的视图变换,模型变换 都是4×4矩阵,每个后续的glMultiMatrix*(N),或者变换函数,glTranslate*(),glRotate*(),等都是把一个新的4×4矩阵与当前的矩阵M相乘,不同的是:变换函数glTranslate*(),...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,905
精华内容 1,962
关键字:

齐次矩阵相乘