精华内容
下载资源
问答
  • 坐标系转换矩阵
    千次阅读
    2021-04-24 17:38:40

    在原始坐标系中给定一个新的坐标系的x,y,z三个轴的向量,求空间转换矩阵。

    再具体些:

    比如最常用的tangent,binormal,normal的然后求一个矩阵,可以将原始坐标系中的一个向量转换到切空间。

    向量与矩阵乘法一律是向量为一行,在左的乘法方式。

    answer: transpose(float3x3(tangent,binormal,normal));

    推导:

    一个向量在一个坐标系中x,y,z坐标的含义即是这个向量在x,y,z轴上单位向量的投影大小,当然这个大小有正负号修饰的。

    那么一个原始坐标系的向量在切空间的坐标就是在tangent,binormal,normal上的投影,也就是用点乘。

    这样就可以得出切空间的转换矩阵应该是transpose(float3x3(tangent,binormal,normal));

    那么其他坐标系转换方式其实一样了。

    另外因为矩阵中三个分量都是单位向量,所以是正交矩阵就有

    mul(matrix, transpose(matrix))==Identity Matrix;==>

    transpose(matrix) == inverse(matrix):其转置即为逆矩阵;

    原文链接:

    http://blog.csdn.net/ccanan/article/details/1637314

    更多相关内容
  • 空间坐标系以及空间两三维坐标系转换矩阵解释 因为工作的原因,需要进行不同坐标系的一个转换,在查阅了众多的网页之后,发现有用的没几个,而且众多都是抄的同一篇文章,而且都是罗列以下旋转的方式,几乎没有解释...

    空间坐标系以及空间两三维坐标系转换矩阵解释

    因为工作的原因,需要进行不同坐标系的一个转换,在查阅了众多的网页之后,发现有用的没几个,而且众多都是抄的同一篇文章,而且都是罗列以下旋转的方式,几乎没有解释旋转角的物理意义,也不说这个旋转角怎么得到的。在折腾了一天之后,终于弄清楚了,特意写下来,既能有助于记忆,又能装b,很好很强大。

    基础背景

    空间三维坐标系转换,大多出现在像我似的搞地图的这群B人里,当然还有搞游戏的大佬们。所以需要对空间三维坐标系做一个小的总结,来防止忘记或者混乱。

    具体图形可百度,赖的放图

    • 地心坐标系
      空间三维坐标系,左手系
    • 高斯坐标系
      在搞激光点云的人眼里,基本上就指的是,当前度带(分3度带和6度带)中的高斯直角坐标系,右手系,点云中记录的点坐标大多有经纬度坐标、高斯坐标,两种坐标。
    • 像空间坐标系
      z轴正方向,与主光轴方向重合,x、y轴方向与相平面坐标系平行。右手系
    • 像平面坐标系
      xy轴方向与像素坐标系平行,单位为m,是一个物理坐标系
    • 像素坐标
      单位为像素,在与像平面坐标系进行转换的时候,需要知道每个像素的物理尺寸

    三维坐标系转换

    为了通用性,前边的空间坐标系只做一个概念上的罗列,这里针对任意两空间直角坐标系的相互转换进行解释。

    • 世界坐标系XYZ:仅仅用于表述,不代表物理意义上世界坐标系
    • 局部坐标系xyz
    • 旋转角:重点需要搞清楚,这个旋转角是从哪个坐标系旋转到哪个坐标系,在地图行业里的多传感器的联合标定中,这个旋转角是由相应的标定文件提供的。

    已知条件

    1. 世界坐标系的三个坐标轴:world_x(1,0,0),world_y(0, 1, 0),world_z(0,0,1)
    2. 局部坐标系的三个坐标轴:local_x(g,h,i),local_y(d,e,f)local_z(a,b,c)
      其中,局部坐标系的坐标轴坐标均为世界坐标系下的坐标值,这点非常重要,同时,两空间三维坐标系还有个平移向量,因为只是很简单的坐标值平移,这里就不再赘述,默认两坐标系的原点相同。

    旋转原理

    这里盗一张图(找了好久,看到的一个良心博客 http://www.skcircle.com/?id=515)
    在这里插入图片描述
    如上图,P点为局部坐标系的z轴上一点,q为点P在世界坐标系ZOY平面上的投影点,r为点P在经过旋转之后的对应点,如果你去查看了贴的那个网页博客,请不要看他的旋转方式,并不是大佬描述错误,而是不适用空间三维坐标系的相互转换,因为这里涉及到一个很蛋疼的说法,这个旋转矩阵描述的是A坐标系到B坐标系转换方式

    世界坐标系到局部坐标系的旋转矩阵R

    注意:XYZ与xyz,我都会严格注意,不会写错!(写错老子就改!看其他博客的时候,就深受其害),为了描述方便,世界坐标系的轴或者坐标都会用大写的XYZ来代替,局部坐标用xyz来代替,而且为了防止0与O不好分辨,所有的0都用汉字零来表示

    问:如何理解旋转矩阵究竟是描述的A到B,还是B到A?

    答:旋转世界坐标系,使得世界坐标系与局部坐标系重合,那么得到的这个旋转矩阵,描述的是,世界坐标系到局部坐标系转换关系,用公式来表达

    							 local = R * world 
    

    结合上方图片:(注意理解旋转角)

    1. 逆时针旋转世界坐标系X轴,使得局部坐标系的 z轴 与世界坐标系的 XOZ 平面共面,结合上图(那个椭圆就是为了方便理解,而虚拟出来的点P的旋转轨迹),要想OP出现在XOZ平面上,就需要逆时针旋转X轴,旋转的角度为θ(注意,α为向量夹角,范围0 - 180,如果这个角不会求,要不,再去从小学开始复读一下吧)。但是注意,旋转角是有方向的,图里的例子,如果要逆时针把OZ,旋转到Oq,那么旋转的角度应该是360 - α。

    注意:其实顺时针也可以,只需要保证所有的轴都同时为逆时针或者顺时针即可,不过大家都通用逆时针而已,所以,请把顺时针给从脑子里删除

    • 如何来获取旋转角度θ(而非向量夹角)
      就需要用到向量的叉乘,来确定向量的左右侧。这里要将OZ旋转到Oq,那么OZ就是基准,需要知道Oq在OZ的左侧还是右侧,图里是在右侧,与逆时针相反,用叉乘表示: OZ ✖ Oq 得到的向量与X轴的乘积小于零,那么旋转角度就应该是θ = 360 - α,如果在OZ的左侧的话,向量夹角就是旋转角度,θ = α。

      旋转的是X轴,那么矩阵描述应该为Rx
      在这里插入图片描述

    1. 经过步骤1之后,局部坐标系的z轴现在就表现为图里的Or,接着逆时针旋转世界坐标系的Y轴,使得世界坐标系的Z轴与局部坐标系得z轴重合,同理,观察Or在OZ得左侧,那么这一步得旋转角度θ = β。
      旋转的是轴,那么矩阵描述应该为Ry
      在这里插入图片描述
    2. 经过前两步得旋转,此时世界坐标系得Z轴与局部坐标系得z轴已经重合了,那么接着逆时针旋转世界坐标系Z轴,就是一个简单得二维上得旋转了,就会很好理解了,如下图所示
      在这里插入图片描述
      同理,求出旋转角θ,这次旋转的是世界坐标系的Z轴,那么旋转矩阵就是Rz,
      在这里插入图片描述

    结束
    经过上边的三步旋转,就将世界坐标系,旋转到了局部坐标系上,通过矩阵的左乘,就能得到世界坐标系到局部坐标系的旋转矩阵R
    R = Rz * Ry * Rx

    完整坐标值形式(加上偏移值)
    local = R * world + T
    其中T为世界坐标系原点在 局部坐标系中的坐标

    局部坐标系到世界坐标系的旋转矩阵

    但是现实中,往往是知道局部坐标系原点在世界坐标系中的坐标,因此,基本上都是求得局部坐标系到世界坐标系得旋转矩阵(上边的R,求个逆即可,自己玩去吧您那,赖的写了)
    2021.11.12号,补充
    还是写清楚吧,方便各位跟我一样的小白。
    上边的旋转矩阵R,描述的是world到local的旋转方式,那么将R求逆得到W,同时知道局部坐标系原点在世界坐标系中的坐标O,那么local坐标转到world坐标的方式如下

    									world = W * local + O
    
    展开全文
  • 坐标系转换矩阵:将一个点云从一个坐标系转换至另一个坐标系中表示。 几何转换矩阵:将点云在某坐标系下进行旋转平移变化。 下面确定以下坐标系转换矩阵和几何转换矩阵的关系。 在世界空间中存在一个坐标系,...

    坐标系转换矩阵:将一个点云从一个坐标系转换至另一个坐标系中表示。

    几何转换矩阵:将点云在某坐标系下进行旋转平移变化。

    下面确定以下坐标系转换矩阵和几何转换矩阵的关系。

    在世界空间中存在一个坐标系,点集P(共有n个点),点集(共有n个点),将坐标系和点集一起平移旋转后,得到了坐标系'和新点集。为了方便理解器位置关系,需要建立世界坐标系 ,这两个坐标系和两个点集在世界坐标系中的位置如图所示。

    在坐标系中观察点集,点集内点的坐标分别为,在坐标系'中观察点集,点集内点的坐标分别为, 其中(i=1:n)。

    则存在几何变换矩阵满足:

                                                

                                                

    若坐标系到坐标系的坐标系转换矩阵,则满足:

                                                                                

                                                                              

    而因为点集P和坐标系的相对位置关系与点集和坐标系的相对位置关系相同,(经过旋转平移得来),则

                                                                                 

    又因为

                                                            

    所以

                                                                                 

    所以几何变换矩阵与坐标系转换矩阵互逆。

    以上推导对深刻理解几何转换和坐标转换有帮助。

     

    展开全文
  • 问题:假如已知两个坐标系如图,如何得到外参数(坐标系变换矩阵:包括旋转和平移)? 如图红色为x轴,绿色为y轴,蓝色为z轴 粗的代表摄像头坐标系,细的代表世界坐标系。 1. 观察变换推导法 步骤:(1)求旋转...

    问题:假如已知两个坐标系如图(粗的代表摄像头坐标系,细的代表世界坐标系),如图红色为x轴,绿色为y轴,蓝色为z。
    如何得到外参数(坐标系变换矩阵:包括旋转和平移)?
    在这里插入图片描述
    外参数矩阵(extrinsic) world->camera变换T12表示为[R12|t12]

    1. 观察变换推导法

    步骤:(1)求旋转矩阵R12
    (2)求平移t12
    1)求旋转矩阵R12:很显然,世界坐标系轴绕z轴逆时针旋转90度就能对应上上图的角度。
    2)求平移t12
    求由摄像头坐标系到世界坐标系的平移的关键是知道两个坐标系原点的坐标。
    t=摄像头原点在世界坐标系上的坐标-世界坐标系原点的坐标
    上图中摄像头原点在世界坐标系上的坐标为(0,0,2)
    世界坐标系原点的坐标为(0,0,0)
    t12=(0,0,2)-(0,0,0)
    因此world->camera变换T12表示为[R12|t12]

    因此可以得到坐标点之间的关系:
    设同一个点P在世界坐标系下表示为P0(x0,y0,z0),在摄像头坐标系下表示为P1(x1,y1,z1)。
    任意一点满足方程
    P 0 = R 12 ∗ P 1 + t 12 P_{0}=R_{12}*P_{1}+t_{12} P0=R12P1+t12
    或者表示为
    P 1 = R 12 − 1 ∗ ( P 0 − t 12 ) P_{1}=R_{12}^{-1}*(P_{0}-t_{12}) P1=R121(P0t12)
    如下面程序段所示:

      Eigen::Vector3d PInWorld={1,2,3};
      cout<<"PinWorld"<<endl<<PInWorld<<endl;
      Eigen::Vector3d PInCam=R12.inverse()*(PInWorld-t12);
    

    2线性变换求旋转矩阵法

    设同一个点P在世界坐标系下表示为P0(x0,y0,z0),在摄像头坐标系下表示为P1(x1,y1,z1)。
    要分解了来求
    步骤:(1)先求旋转矩阵R
       (2)再求平移t

    2.1先求旋转矩阵R12

    不考虑平移,我们可以发现一下有以下规律
    世界->摄像头
    x0=-y1,y0=x1,z1=z0

    P在在世界坐标系的值为x0的坐标对应摄像头坐标系下值为-y1
    P在在世界坐标系的值为y0的坐标对应摄像头坐标系下值为x1
    P在在世界坐标系的值为z0的坐标对应摄像头坐标系下值为z1

    !不考虑平移!
    P 0 = R 12 ∗ P 1 P_{0}=R_{12}*P_{1} P0=R12P1
    用矩阵形式表示为
    [ x 0 y 0 z 0 ] = [ 0 − 1 0 1 0 0 0 1 0 ] ⋅ [ x 1 y 1 z 1 ] \begin{bmatrix} x_{0}\\ y_{0}\\ z_{0} \end{bmatrix}=\begin{bmatrix} 0 &amp; -1 &amp; 0\\ 1&amp; 0 &amp; 0\\ 0 &amp; 1 &amp; 0 \end{bmatrix}\cdot \begin{bmatrix} x_{1}\\ y_{1}\\ z_{1} \end{bmatrix} x0y0z0=010101000x1y1z1
    可以得到旋转矩阵R12为
    R 12 = [ 0 − 1 0 1 0 0 0 1 0 ] R_{12}=\begin{bmatrix} 0 &amp;-1 &amp;0\\ 1&amp; 0 &amp; 0\\ 0 &amp; 1 &amp; 0 \end{bmatrix} R12=010101000

    2.2再求平移t12

    求由摄像头坐标系到世界坐标系的平移的关键是知道两个坐标系原点的坐标。
    t=摄像头原点在世界坐标系上的坐标-世界坐标系原点的坐标
    上图中摄像头原点在世界坐标系上的坐标为(0,0,2)
    世界坐标系原点的坐标为(0,0,0)
    t12=(0,0,2)-(0,0,0)

    3.实验程序

    对应以上推导的程序如下

    #include <ros/ros.h>
    #include <visualization_msgs/Marker.h>
    #include<time.h>
    #include <unistd.h>
    #include<iostream>
    #include<eigen3/Eigen/Core>
    #include<eigen3/Eigen/Geometry>
    #include <tf/transform_broadcaster.h>
    using namespace std;
    using namespace Eigen;
    
    int main( int argc, char** argv )
    {
    
      ros::init(argc, argv, "tfshow");
      cout<<"start program"<<endl;
      //    //1.p1 world position
      double p1yaw=0;
      double p1x=0;
      double p1y=0;
      Eigen::AngleAxisd rotzp1(p1yaw*M_PI/180, Eigen::Vector3d::UnitZ());
      Eigen::Vector3d  t1= Eigen::Vector3d(p1x,p1y, 0);
      Eigen::Quaterniond q1=Eigen::Quaterniond(rotzp1);
      //cout<<"q1.vec()"<<q1.vec()<<endl;
      cout<<"p1 eular angle"<<(180/M_PI)*q1.matrix().eulerAngles(0,1,2)<<endl;
    
      //2. t12 value
      double t12yaw=90;
      double t12x=0;
      double t12y=0;
      double t12z=2;
    
      Eigen::AngleAxisd rott12(t12yaw*M_PI/180, Eigen::Vector3d::UnitZ());
      Eigen::Vector3d  t12= Eigen::Vector3d(t12x,t12y, t12z);
      Eigen::Quaterniond q12=Eigen::Quaterniond(rott12);
      cout<<"t12 rotation eular angle "<<(180/M_PI)*q12.matrix().eulerAngles(0,1,2)<<endl;
       Eigen::Matrix3d R12=rott12.matrix();
       cout<<"R12="<<R12<<endl;
    
    
      //    3.calculate p2 world positon
      Eigen::Quaterniond q2=q1*q12;
      // cout<<" q2 vector " <<q2.vec()<<endl;
      Eigen::Vector3d t2=t1+q1.toRotationMatrix()*t12;
      cout<<"t2="<<t2<<endl;
      cout<<"t2 eular angle "<<(180/M_PI)*q2.matrix().eulerAngles(0,1,2)<<endl;
    
    
      tf::TransformBroadcaster br;
      tf::Transform transform;
      transform.setOrigin( tf::Vector3(t12(0),t12(1), t12(2)));
    
      tf::Quaternion q(q12.x(),q12.y(),q12.z(),q12.w());
      transform.setRotation(q);
    
      //P1 in world
      Eigen::Vector3d PInWorld={1,2,3};
      cout<<"PinWorld"<<endl<<PInWorld<<endl;
      Eigen::Vector3d PInCam=R12.inverse()*(PInWorld-t12);
      cout<<"PInCam"<<endl<<PInCam<<endl;
      int k=0;
      while(k<100)
      {
          br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", "camera"));
          k++;
          sleep(1);
      }
      return 0;
    }
    
    
    
    
    展开全文
  • 坐标系转换矩阵简单说明

    千次阅读 2019-03-02 14:27:00
    在渲染开始前,从local space转换到world space,再转换到camera space,使用矩阵变换 变换矩阵 先给出变换矩阵 [xpypzp1]=[100xe010ye001ze0001][xuxvxw0yuyvyw0zuzvzw00001][upvpwp1]pxyz=[uvw00001]puvw \begin{...
  • 详细介绍三相坐标系与两相禁静止坐标系转换过程,两相静止坐标系到两相旋转过程,包括坐标系的推导转换公式推导介绍,以及对应的坐标转换图形介绍。
  • 简便的两坐标系转换矩阵

    千次阅读 2018-10-17 11:40:12
    下面聊聊很简便的用肉眼快速观察两坐标系转换矩阵 可以看: 坐标系1的x轴与坐标系2的哪根轴在一条直线上,同向则1,反向则-1; 坐标系1的y轴与坐标系2的哪根轴在一条直线上,同向则1,反向则-1; 坐标系1...
  • 已知不同坐标系的多个坐标点的坐标,求两个坐标系转换矩阵,是matlab写的程序,三维坐标的。 做机器人视觉导航时用到的这个转换。
  • 用到了刚体转换,方便进行两个坐标系之间的转换
  • 两个坐标系转换的变换矩阵

    千次阅读 2021-05-14 16:30:54
    ####问题:假定下图中的A坐标系是世界坐标系,我们想求出目标坐标系B到世界坐标系的旋转矩阵。 从B到A的变换既有旋转也有平移。从B到A的变换矩阵是一个4x4的矩阵算子。 B到A的旋转矩阵的定义式: 其中 ...
  • 求解两个坐标系之间的转换矩阵

    千次阅读 2021-04-22 00:35:49
    【实例简介】求解两个坐标洗之间的转换矩阵,即求解旋转量和平移量【实例截图】【核心代码】Matrix└── CollisionDetection├── CollisionDetection│ ├── CollideLIB.lib│ ├── CollisionDetection.cpp│...
  • 坐标系变换矩阵推导

    千次阅读 2021-01-18 11:54:29
    1.平移变换 2.旋转变换 由固定坐标系旋转到另一个坐标系
  • 机器人坐标系变换 坐标变换-旋转部分 二维坐标旋转的向量和几何表示 对于以前数学学习不好的人来说,在机器人的坐标变换里,总是各种蒙。 这个图片来给你解答。
  • 本资源为Qt绘图基础,世界坐标系转换为逻辑坐标系。世界坐标系原点在视图左上角,本例子通过世界坐标转换,将坐标原点定位在视图中央,Y轴向上,X轴向右,并绘制坐标轴,基于逻辑坐标系下的绘图,可将转换关系函数...
  • 深入理解空间坐标系矩阵变换

    千次阅读 2020-01-01 10:33:05
    深入理解空间坐标系的矩阵变换 空间中三维坐标变换一般由三种方式实现,第一种是旋转矩阵和旋转向量;第二种是欧拉角;第三种是四元数。这里先介绍旋转矩阵(旋转... 那么旋转的欧拉角按从世界坐标系转换到相机坐标...
  • 在开始前先做一些准备工作,创建两个空物体分别命名为centerPos与targetPos,接下来所执行的操作就可以理解为求targetPos相对于centerPos的本地坐标系下的坐标,即此时centerPos为坐标原点,来求出targetPos在该坐标...
  • 已知不共线的三点在两个坐标系下面的坐标,求解 两个坐标系转换参数,精度可满足一般程度上的定位需求。步骤清楚,可直接上手code
  • 变换矩阵在左右坐标系转换

    千次阅读 2019-08-27 22:06:36
    文章目录疑惑坐标系的不同坐标系转换原理结论参考 疑惑 Max导出的fbx模型文件加载到客户端,对变换矩阵做了如下的转换,把Z-up右手坐标系的变换矩阵换到Y-up左手坐标系的变换矩阵。咋一看相当懵逼~ FORCEINLINE void...
  • 之前整理过:《透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵》、《三维旋转笔记:欧拉角/四元数/旋转矩阵/轴角-记忆点整理》,这次转载FuckGIS的《Cesium之球心坐标与本地坐标》,算是线性代数在前端领域的的又一...
  • 该函数计算空间中光束的“全局到局部”坐标转换矩阵。 [x0,y0,z0] 和 [x1,y1,z1] 是梁端的坐标。 alpha 是垂直于梁横截面积的轴上的扭曲,通常设置为 0。
  • 详解坐标变换矩阵

    万次阅读 多人点赞 2021-12-27 22:54:28
    在高级驾驶辅助系统(ADAS)领域,存在多种常用的坐标系:LiDAR坐标系、车身坐标系、...高中就接触到点的旋转矩阵(Rotation matrix),即坐标系不变,点绕坐标原点顺时针旋转 θ°。 二、旋转变换矩阵(Rotation ..
  • 坐标系变换中的矩阵表示

    千次阅读 2021-04-29 15:04:04
    这样将坐标系的变换就可以转换矩阵的计算。 比如,变换关系为: R1*R2 = R3 即经过R2 变换后,再经过R1变换,得到的结果和直接经过R3变换的值是相同的。这样就有了这样的转换关系。 如果已知其中两种变换关系,...
  • 包含平移和旋转变换: #include &lt;iostream&gt; #include &lt;GTEngine/Mathematics/GteConvertCoordinates.h&gt; using namespace gte; // #define Vector4&...int main(int argc, cha...
  • 实现将单通道的图像或矩阵从直角坐标系转化为极坐标的,语言为MATLAB,代码中有详细的注释说明。 详情请参见下面这篇博文: https://blog.csdn.net/wenhao_ir/article/details/124831090
  • 以Android ColorMatrix为例(右手坐标系): 可结合Android Matrix矩阵详解查看 绕X轴旋转: 绕Y轴旋转: 绕Z轴旋转: 以Unity为例(左手坐标系): 绕X轴旋转: 绕Y轴旋转: 绕Z轴旋转:
  • 关于三维空间坐标转换矩阵相乘可以理解为局部坐标转换到全局,举例说明矩阵A*B的结果可以理解为B矩阵经过A的转换,转到了和A同级别的坐标系下。 1,矩阵右乘,坐标系发生变化(局部转全局) 每个矩阵都可以构造...
  • 三维空间坐标系变换-旋转矩阵

    千次阅读 2021-02-25 10:34:21
    空间中三维坐标变换一般由三种方式实现,第一种是旋转矩阵和... 那么旋转的欧拉角按从世界坐标系转换到相机坐标系的过程,先按z轴旋转、之后y轴旋转、之后x轴旋转,最终得到相机坐标系,得到的角度分别是yaw、pitch...
  • 卡尔曼滤波,由笛卡尔坐标到极坐标的转换,并给出测量噪声的相关矩阵R的公式,MATLAB即可实现。(坐标系转化的推导文档)
  • python三点法位姿矩阵计算
  • #include &lt;iostream&gt; #include &lt;GTEngine/Mathematics/GteConvertCoordinates.h&gt; using namespace gte;...int main(int argc, char const *argv[]) ... ConvertCoordinates...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,802
精华内容 15,520
关键字:

坐标系转换矩阵

友情链接: keyscanverilog.zip