首页 > 其他分享 >坐标变换

坐标变换

时间:2023-04-28 18:12:02浏览次数:47  
标签:cos end 变换 begin 坐标 bmatrix theta sin

坐标变换最通俗易懂的解释(推导+图解)_肥肥胖胖是太阳的博客-CSDN博客

绕一个轴的旋转

这里写的旋转角与标准的旋转角互为相反数,标准旋转角的定义为面向旋转轴的方向观察,顺时针为正,逆时针为负,ChatGpt给出的结果:[Chat](#Chat)

两个直角坐标系间的变换有6个自由度,分别是\(X 、Y、Z\)的平移和\(\theta_x、\theta_y、\theta_z\)三个绕轴的旋转。
|600
以\(Z\)轴旋转为例,转动一个小角度,得到下列关系式:

\[\begin{array}{} X'=\frac{X}{\cos{\theta_z}}+(Y-X\tan{\theta_z})\sin(\theta_z)=X\cos{\theta_z}+Y\sin{\theta_z}\\ Y'=(Y-X\tan{\theta_z})\cos(\theta_z)=-X\sin{\theta_z}+Y\cos\theta_z\\ Z'=Z \end{array} \]

即:

\[ \left[ \begin{array}{c} X'\\ Y'\\ Z'\\ \end{array} \right] =\left[ \begin{matrix} \cos \theta_ z& \sin \theta_z& 0\\ -\sin \theta_z& \cos \theta_z& 0\\ 0& 0& 1\\ \end{matrix} \right] \left[ \begin{array}{c} X\\ Y\\ Z\\ \end{array} \right] =R_z \left[\begin{array}{c} X\\ Y\\ Z\\ \end{array}\right] \]

同理:

\[ \ \ R_y=\left[ \begin{matrix} \cos \theta _y& 0& -\sin \theta _y\\ 0& 1& 0\\ \sin \theta _y& 0& \cos \theta _y\\\end{matrix} \right] \ \ R_x=\left[ \begin{matrix} 1& 0& 0\\ 0& \cos \theta _x& \sin \theta _x\\ 0& -\sin \theta _x& \cos \theta _x\\\end{matrix} \right] \]

则坐标变化的公式为:

\[\left[ \begin{array}{c} X'\\ Y'\\ Z'\\ \end{array} \right] =R_x R_y R_z \left[\begin{array}{c} X\\ Y\\ Z\\ \end{array}\right] + \left[\begin{array}{c} x\\ y\\ z\\ \end{array}\right] \]

任意两个坐标系之间的旋转平移

Drawing 2023-04-14 20.19.22.excalidraw
Drawing 2023-04-14 20.19.22.excalidraw
先考虑两个坐标系之间的旋转关系,再考虑平移就十分简单了。
正交坐标系\(O\)中,三个正交的单位向量:\(e_x,e_y,e_z\)
正交坐标系\(O'\)中,三个正交的单位向量:\(e_{x'},e_{y'},e_{z'}\)
则,一定可以用\(e_x,e_y,e_z\)来表示\(e_{x'},e_{y'},e_{z'}\)。(注意:向量符号的表示与坐标系无关) ,即:

\[\begin{bmatrix} e_x'\\ e_y' \\e_z' \end{bmatrix} =\begin{bmatrix} a_{11} &a_{12} &a_{13}\\ a_{21} &a_{22} &a_{23}\\ a_{31} &a_{32} &a_{33} \end{bmatrix} \begin{bmatrix} e_x\\ e_y \\e_z \end{bmatrix} =R \begin{bmatrix} e_x\\ e_y \\e_z \end{bmatrix} \]

其中,旋转矩阵中的系数是O'坐标轴向O坐标轴的投影
已知\(P(x,y,z)\),即\(\vec{OP}=xe_x +ye_y+ze_z\),易证:

\[\begin{bmatrix} x'\\ y' \\z' \end{bmatrix} =\begin{bmatrix} a_{11} &a_{12} &a_{13}\\ a_{21} &a_{22} &a_{23}\\ a_{31} &a_{32} &a_{33} \end{bmatrix} \begin{bmatrix} x\\ y \\ z \end{bmatrix} =R \begin{bmatrix} x\\ y \\z \end{bmatrix} \]

加上平移矩阵:

\[\begin{bmatrix} x'\\ y' \\z' \end{bmatrix} =\begin{bmatrix} a_{11} &a_{12} &a_{13}\\ a_{21} &a_{22} &a_{23}\\ a_{31} &a_{32} &a_{33} \end{bmatrix} \begin{bmatrix} x\\ y \\ z \end{bmatrix} + \begin{bmatrix} x_0\\ y_0 \\ z_0 \end{bmatrix} =R \begin{bmatrix} x\\ y \\z \end{bmatrix}+T \]

Chat


role::user

如何根据旋转、俯仰和偏航角确定旋转矩阵


role::assistant

旋转、俯仰和偏航角通常用于描述飞行器或机器人在三维空间中的朝向。根据欧拉角的定义,旋转、俯仰和偏航角分别是绕\(Z\)轴、\(Y\)轴和\(X\)轴的旋转角度。因此,可以通过以下步骤确定旋转矩阵:

  1. 绕\(Z\)轴旋转\(\theta\)角度,得到旋转矩阵\(R_z\):

\[R_z = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \]

  1. 绕\(Y\)轴旋转\(\phi\)角度,得到旋转矩阵\(R_y\):

\[R_y = \begin{bmatrix} \cos\phi & 0 & \sin\phi \\ 0 & 1 & 0 \\ -\sin\phi & 0 & \cos\phi \end{bmatrix} \]

  1. 绕\(X\)轴旋转\(\psi\)角度,得到旋转矩阵\(R_x\):

\[R_x = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\psi & -\sin\psi \\ 0 & \sin\psi & \cos\psi \end{bmatrix} \]

  1. 将三个旋转矩阵按照\(Z-Y-X\)的顺序相乘,得到最终的旋转矩阵\(R\):

\[R = R_x R_y R_z = \begin{bmatrix} \cos\theta\cos\phi & \cos\theta\sin\phi\sin\psi - \sin\theta\cos\psi & \cos\theta\sin\phi\cos\psi + \sin\theta\sin\psi \\ \sin\theta\cos\phi & \sin\theta\sin\phi\sin\psi + \cos \theta\cos\psi & \sin\theta\sin\phi\cos\psi - \cos\theta\sin\psi \\ -\sin\phi & \cos\phi\sin\psi & \cos\phi\cos\psi \end{bmatrix} \]

这个旋转矩阵\(R\)描述了从一个坐标系到另一个坐标系的旋转变换。例如,如果一个向量\(v\)在原始坐标系中的坐标是\((x,y,z)\),那么在新的坐标系中的坐标\(v'\)可以通过以下公式计算:

\[v' = Rv \]

其中,\(v\)和\(v'\)都是列向量。


标签:cos,end,变换,begin,坐标,bmatrix,theta,sin
From: https://www.cnblogs.com/CryCat/p/17362885.html

相关文章

  • 霍夫变换
    OpenCV:HoughLineTransformGitHub上的一个项目原理与代码二维直线检测一条直线可以表示为:\[\rho=x\cos\theta+y\sin\theta\]在(x,y)空间中的一个点(x0,y0),在\((\theta,\rho)\)空间中表示为一条曲线。在\((\theta,\rho)\)空间中的一个点\((\theta_0,\rho_0)\),在(x,y)......
  • halcon 仿射变换
    一、两点计算:刚体仿射变换1、vector_to_rigid:1)根据两个以上点对计算计算刚性仿射变换矩阵,支持旋转和平移2、vector_angle_to_rigid1)根据点和角度计算刚性仿射变换矩阵,支持旋转和平移 ......
  • 一步步制作下棋机器人之 完善XY坐标控制
    匆匆忙忙,又是一周。马上五一,凑了十天假期,想想就开心。但是假期中是生日,又老了一岁了。很多目标都没有实现,就马上要到30了,可怕。30啊!!唉,时光匀速又决绝的前行不息,推动了没有返程票的人生旅程。总想着不断提升自己,不断丰富生命的意义,不断拓宽人生的界限,让人世这一遭不至于太单调......
  • Java+proj4j实现根据EPSG编码进行坐标系转换
    场景Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130370754上面使用GeoTools实现坐标系转换。Vue+Openlayers+proj4实现坐标系转换:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/13038879......
  • 矩阵旋转,仿射变换
    importnumpyasnpimportmathasmdefRx(theta):returnnp.matrix([[1,0,0],[0,m.cos(theta),-m.sin(theta)],[0,m.sin(theta),m.cos(theta)]])defRy(theta):returnnp.matrix([[......
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换
    场景Java+GeoTools(开源的JavaGIS工具包)快速入门-实现读取shp文件并显示:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130367852在上面实现Java中集成Geotools之后,需求是将WKT数据转换成其他坐标系的WKT。比如说将EPSG:4524的坐标系转换成EPSG:2334的坐标系......
  • MFC-ScreenToClient屏幕坐标转换为客户区坐标
     win32APIPOINTpoint={20,50};HWNDhWnd=GetSafeHwnd();BOOLb=::ScreenToClient(hWnd,&point);//屏幕坐标转换为客户区坐标/*参数1:HWNDhWnd窗口句柄参数2:LPPOINTlpPoint屏幕坐标点函数成功后,保......
  • 【学习笔记】快速傅里叶变换
    怎么有人省选后才来学FFT啊由于时间原因,本篇笔记仅为个人总结,真正想要学习FFT的请参看这篇博客。前置知识单位根性质:$w_n^{2k}=w_{n/2}^k$$w_n^a+w_n^b=w_n^{a+b}$算法原理可知n+1个点可以唯一确定一条n次多项式,于是可以用n个点的点对集合表示一条曲线。......
  • 洛谷P2241 统计方形 ,棋盘问题升级板,给出格子坐标中矩形以及正方形的计算方法
    在做这道题之前我们先了解一下棋盘问题棋盘问题(qq.com)......
  • MFC-GetClientRect获取窗口客户区的坐标
     win32APIRECTrect;CWnd*pWnd=GetDlgItem(IDC_LIST1);HWNDhWnd=pWnd->GetSafeHwnd();BOOLb=::GetClientRect(hWnd,&rect);//获取窗口客户区的坐标/*参数1:HWNDhWnd窗口句柄参数2:LPRECTlpRect返回客户区坐标......