问题描述:

已知一个全局坐标系,还有若干局部坐标系,如何将局部坐标系的坐标转成全局坐标系的坐标?反过来又如何进行?

这里的坐标系都是直角坐标系。

本文通过下面几个方面的研究来回答上面的问题。

1、简单示例

2、求解过程

3、nodejs编程验证

简单示例

已知点A(6,6),B(14,14),C(-2,14),G(12,12),求当A为原点 ,AB为X轴,AC为Y轴时 G点的坐标。可以见下图:

通过查看图形,我们可以很快的计算出点G新的坐标如下:

但是如果G为任意一点,我们还能轻松求出来么?显然我们不行。我们需要一种通用的方法来一次到位,这里就引入了矩阵变换的概念。

求解过程

重新理解坐标系的(x,y)。看下图:

我们的某个点的坐标实际上表达的是坐标轴单位向量的个数。x表示X轴单位向量个数,y表示Y轴单位向量个数。有了这个概念之后,我们重新来看待上面的问题:

假设AB单位向量为p(px,py),AC单位向量为q(qx,qy)。点G在新坐标系下为(x1,y1)

换成矩阵计算的写法:

由于AG向量可以很容易的求出来,单位向量p,q也很容易求出来,所以我们的新的坐标系下面的(x1,y1)也可以很容易求出来。通过逆矩阵变换可以求出下面公式:

就这样,我们通过重新理解坐标x和y的含义,通过引入了一个变换矩阵就轻松解决了坐标系的变换,是不是非常简单?这也是出乎我意料之外的,开始我也觉得好难好难。不过上述方法每次需要先求出AG的向量再进行计算,我们能否做到一步到位?当时答案是肯定的,我们通过引入一个三维矩阵,就可以轻松搞定。

我们将上述变换矩阵由二维扩展到三维,如下:假设A点的坐标为(Ax,Ay)。点G新坐标下(x1,x2),老坐标下(x0,y0)

这里我们换成三维矩阵的表达形式:

最左边的三维变换矩阵可以很容易求出来,那么我们可以根据G新坐标求出老坐标。再通过逆矩阵也可以根据老坐标求出新坐标。

总结:

解决这个问题非常简单只需要两步就搞定了。

第一步:我们需要求出新坐标系的x轴和y轴的单位向量,

第二步:构建一个三维变换矩阵,完成坐标的转换。

nodejs编程验证

这里通过编程的方式来验证变换矩阵的正确性,验证的示例就是上面简单示例。

这里矩阵计算我们采用gl-matrix库,github地址如下:

https://github.com/toji/gl-matrix

安装如下:这个库不需要再安装ts的定义,已经自带了。

npm i gl-matrix

第一步:定义点

let A = gl.vec3.fromValues(6, 6, 1)
let B = gl.vec3.fromValues(14, 14, 1)
let C = gl.vec3.fromValues(-2, 14, 1)
let G = gl.vec3.fromValues(12, 12, 1)

第二步:求新坐标系的X轴和Y轴的单位向量

let AB: gl.vec3 = gl.vec3.create()
let AC: gl.vec3 = gl.vec3.create()gl.vec3.subtract(AB, B, A)
gl.vec3.subtract(AC, C, A)let UnitAB: gl.vec3 = gl.vec3.create()
let UnitAC: gl.vec3 = gl.vec3.create()gl.vec3.normalize(UnitAB, AB)
gl.vec3.normalize(UnitAC, AC)

第三步:构造计算矩阵

let mat = gl.mat3.fromValues(UnitAB[0],UnitAB[1],UnitAB[2],UnitAC[0],UnitAC[1],UnitAC[2],A[0],A[1],A[2]
)

第四步:求逆矩阵

let matInvert: gl.mat3 = gl.mat3.create()
gl.mat3.invert(matInvert, mat)

第五步:求新坐标系下的坐标G1

let G1: gl.vec3 = gl.vec3.create()
gl.vec3.transformMat3(G1, G, matInvert)

第六步:根据新求出的坐标反过来求原坐标系坐标G2

let G2 = gl.vec3.create()
gl.vec3.transformMat3(G2, G1, mat)

第七步:设置人工算出的值G3

let G3 = gl.vec3.fromValues(3 * Math.sqrt(8), 0, 1)

输出结果如下:验证矩阵变换结果符合预期

G:12,12,1
G1:8.485280990600586,0,1
G2:12,12,1
G3:8.485280990600586,0,1

线性代数-坐标系变换相关推荐

  1. 线性代数——坐标系空间转换

    线性代数--坐标系空间转换 二维坐标系转换 二维坐标系的变换分为旋转变换和平移变换. 旋转变换 假设已知基坐标系XOY中的一点P(x,y),坐标原点为O,绕点O旋转θ,可以求得点P在新坐标系X'OY' ...

  2. QPainter中坐标系变换问题

    一.坐标系简介. Qt中每一个窗口都有一个坐标系,默认的,窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小.原点即为(0,0)点,然后以像素为单位增减. ...

  3. 视觉slam学习--坐标系变换 | 欧式变换+仿射变换+射影变换

    机器人坐标系变换 https://wenku.baidu.com/view/eebf7912866fb84ae45c8dd5.html?sxts=1600217363607&word=%E6% ...

  4. 研究相机和IMU坐标系变换

    刚开始录制的数据时没有考虑相机和IMU之间的坐标变换,但是后来发现跟踪效果不好,去查验imu数据时,发现,我采集保存的imu数据格式没有和euroc数据集中的imu数据保存格式统一,所以需要研究的是在 ...

  5. 汉诺塔问题的核心除了递归还有坐标系变换

    一开始我这么写,虽然感觉有道理,但是不知道f(2)每次调用的时候怎么判定落点 之后才知道原来是把轴像坐标系变换那样子换了

  6. ggplot2_coor_xxx()坐标系变换

    作者:Li_Yuhui 四川大学研究生在读 本文是ggplot2_可视化_速成的第2节 第3节:scale_xxx()标度调整 第4节:facet_xxx()分面系统 第5节:Guides图例与增加坐 ...

  7. 理解计算机3D图形学中的坐标系变换

    要谈坐标系变换,那么坐标系有哪些呢?依次有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系.我要讨论的就是这些坐标系间的转换.      这些坐标系不是凭空而来,他们都是为了完成计算机3 ...

  8. (七) carla真实世界坐标系与全局俯视地图像素坐标系变换

    (七) carla真实世界坐标系与全局俯视地图像素坐标系变换 问题陈述 下图为 carlacarlacarla 中 Town07Town07Town07 的真实世界. 下图为 carlacarlaca ...

  9. 一、Mahony姿态解算——坐标系变换

    坐标系 在飞行器姿态解算中,通常以地球坐标系(E系)为绝对坐标系,以机体坐标系(B系)为相对坐标系,并通常设初始状态时E系和B系重合. 坐标系变换 我们将空间中某一向量从一个坐标系,通过坐标系变换,映 ...

最新文章

  1. Saltstack 用户管理
  2. F7-Vue1.0与2.0不兼容列表
  3. linux find命令格式及find命令详解
  4. python中fit函数_Houdini中fit( )函数学习笔记
  5. sdcv: 在Ubuntu中使用命令行查询离线英文词典
  6. Java安全 – JCE (Blowfish算法报错)
  7. 判断new出来的对象里面值为null
  8. [转]理解JSON:3分钟课程
  9. 【机器学习系列】EM算法第三讲:由Jensen Inequality推导EM算法
  10. 以代码为实例讲解sizeof函数易混淆的用法
  11. 转载:Latex——在线快速生成表格代码
  12. crmeb 多商户小程序配置
  13. linux常用命令(61):ps命令
  14. 100题前端面试[题目+答案] -- 自用
  15. android auto只能用谷歌地图吗,Android Auto获得导航、停车、充电等多方面新应用支持...
  16. 机器学习算法之——走近卷积神经网络(CNN)
  17. qcc514x-qcc304x调试笔记-蓝牙发射功率
  18. Pytorch激活函数之Relu家族:ReLU、LeakyReLU等
  19. 虚幻骨骼重定向-TPos
  20. ai混剪工具tiktok批量剪辑工具

热门文章

  1. LeetCode – Refresh – Exceel Sheet Column Number
  2. SQL Server 2008性能故障排查(二)——CPU
  3. java内存模型(netty权威指南)
  4. 一起谈.NET技术,WPF的消息机制(一)- 让应用程序动起来
  5. oracle 10g在redhat4.6上的安装
  6. 给被Access过大问题困扰的网站,提供几种解决方案
  7. 米小爱团队负责人王刚:语音交互背后,有多少人工就有多少智能
  8. c++时间片轮转rr进程调度算法_「学习笔记」时间片轮转(RR)调度算法(详解版)...
  9. OPENCV数据结构体系和常用函数
  10. element ui 表格中的渲染有多个状态判断的情况