之前整理过:《透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵》、《三维旋转笔记:欧拉角/四元数/旋转矩阵/轴角-记忆点整理》,这次转载 FuckGIS的《Cesium之球心坐标与本地坐标》,算是线性代数在前端领域的的又一应用案例吧

球心坐标(ECEF)与本地坐标(NEU)

假如你来到一个陌生城市,你很可能需要问路、通常会告诉你向北走100米,右转,向东走100米,理解起来很直观。你给儿子买了一个地球仪,你从北京(39,115)转到伦敦 (51,0),这个动作就可以分解为两步:先转到同一个经度(39,0),在转到同一个维度(51,0)

这个例子体现了一个问题:不同的地理范围下会使用更适合的坐标系。比如前者是局部的平面坐标,而后者是球面坐标。因此,同一个点相对不同的原点,具有不同的相对位置:既是地球上的一个经纬度,又是“出门右转富士康”的这类的位置。如图,蓝色坐标系就是球心坐标,而绿色坐标系是以球面一点为原点的本地坐标系。准确讲,就是该点对应球的切面和法线组成的空间。

这自然引出了这个问题:如何从以球心为原点的球面坐标到以球面上任意一点为原点的局部坐标,坐标系之间的转换,答案就是矩阵

坐标系的换算,其实就是坐标原点之间的转换。比如发射导弹,首先瞄准,然后发射。

这里面就包括两个动作:旋转和平移。如上图,旋转分为两步,经度(Z轴)旋转和纬度(X轴)旋转,分别是上图中绿色和蓝色两个过程。

如上,假设该经纬度对应的笛卡尔坐标为(XYZ),这就是从球心原点到该点的平移,两者结合得出矩阵的计算公式如下:

公式有了,我们把复杂的空间几何问题转为数值计算,便于抽象理解和计算机的处理。该如何理解矩阵背后的几何意义呢?

矩阵的几何意义

如上是两个二元一次方式组,不难推算,X = 1,Y=2是方程组的解。该方式式对应的矩阵形式如下:

对应的行优先对应的几何意义如下,红线代表方程式一,蓝线代表方式式二,两条直线相交于(1,2)。

Row Picture

我们在看看列优先的几何意义,此时矩阵分解为:

我们来看看其对应的向量意义:

如上图,分别是向量[1,2]和[-1,1],我们已经知道x和y的值分别为1,2。如上图,我们把向量[-1,1]延长2倍,也就是[-2,2],然后将该向量平移到[1,2]点,也就是向量1的终点,如下图,就是向量加的计算过程,[1,2] + [-1,1] *2 = [-1,4],几何意义就是在该向量偏移量的累加。

Col Picture

矩阵之所以能够解决坐标转换问题,正是因为其Col Picture所体现的向量意义。现在,我们再体会一下之前的矩阵,是否有一点亲切。

优化

如上是矩阵公式推算和几何意义的解释。看上去是几何问题,实际上是函数问题,这正是矩阵的价值所在。但函数问题也有一个缺点,特别是矩阵,计算量太大,占用内存也不低。大家在做数学题的时候应该都有过类似感觉,一个代数题好复杂,计算了半天,还容易犯错,好不容易才得出答案。这时老师用几何的思路来求解,一目了然,如穿越虫洞般不费吹灰之力。

回到这个问题,我们把坐标转换抽象成矩阵问题,对应的几何意义就是该点的切面和法线。假设是一个圆,如下,圆心到该点就是其切面法线,这个向量很容易得出,通过点乘可以很容易的得到法线对应该点的垂线。

这时,把这个圆看成一个球,两条黑线的叉乘就可以得出另一个垂线,这就是该点对应的NEU坐标的三个轴,是不是也很容易理解,而且只需要三个步骤,计算量很小:

减法求出Up向量

点乘求出East向量

叉乘求出North向量

这正是Cesium中提供的思路,对应Transforms.eastNorthUpToFixedFrame方法,我就不当搬运工了,Over

转载本站文章《Cesium球心坐标与本地坐标系经纬转换的数学原理—矩阵变换》,

请注明出处:https://www.zhoulujun.cn/html/theory/Mathematics/Geometry/8330.html

Cesium球心坐标与本地坐标系经纬转换的数学原理—矩阵变换相关推荐

  1. Cesium for UE4中的坐标系及其转换

    Cesium for UE4中的坐标系及其转换 CesiumGeoreference Actor Controls how global geospatial coordinates are mapp ...

  2. 左手坐标系和右手坐标系以及Unity中的世界坐标系和本地坐标系

    一.左手坐标系和右手坐标系 1.左手坐标系: 伸开我们的左手, 掌心向外, 大拇指与食指成90度, 中指.无名指和小指弯曲, 大拇指指向的方向就是X轴正方向, 食指指向的方向就是Y轴正方向, 中指.无 ...

  3. Cesium中的坐标系及转换

    在我们开始学习Entity之前,我们首先需要先学习下Cesium中的坐标系,Cesium中有多个坐标系,在进行添加Entity时经常会使用到. 一.坐标系介绍 我们先来列举下Cesium中的坐标系:W ...

  4. 学习【Cesium】第四篇,Cesium的坐标与转换(学不会揍我)

    Cesium坐标系 Cesium中常用的坐标有两种WGS84地理坐标系和笛卡尔空间坐标系,我们平时常用的以经纬度来指明一个地点就是用的WGS84坐标,笛卡尔空间坐标系常用来做一些空间位置变换如平移旋转 ...

  5. Unity学习笔记 球形全景图平面像素坐标与三维坐标系上的坐标之间的转换

    前言 本文将讲解如何通过球形全景图上的二维坐标通过换算得到三维坐标系上的三维坐标.具体场景就是,已知道一张全景图上某个点的像素位置(px,py),最终可以算出该点对应在球体上的三维坐标(X,Y,Z). ...

  6. react-native原生GPS与高德地图坐标,百度地图坐标系的转换

    问题 今天用react-native原生GPS拿到得定位信息,如图: 之前高德地图取到的定位数据为(显示带有longtitude,latitude===的log)准确的 121.518828125,3 ...

  7. PHP 不同地图坐标系经纬度转换 GCj02 WGS84 BD-09

    项目中用到了 北斗车辆导航,app用的高德插件,因为高德(GCj02坐标系)与北斗(WGS84 坐标系)采用的坐标系不同,就在网上找了转换方法,用PHP写了一遍 代码里面还有百度的 BD-09 坐标, ...

  8. cocos 坐标系的转换

    //实现点击屏幕背景玩家移动到该位置 moveToClicked : function(eventString){ var self = this; self.bg.on(eventString,fu ...

  9. unity3d世界坐标系和本地坐标系

    transform.Translate(Vector3.forware);//向着自己坐标前方 transform.Translate(Vector3.forware,Space.World);//向 ...

最新文章

  1. Mac搭建Git服务器—开启SSH
  2. lvs集群基础及lvs-nat、dr、fwm实践
  3. 有一天人人都会变成程序猿
  4. (Easy) FizzBuzz LeetCode
  5. 基于Wide Deep Learning的推荐系统
  6. javadoc提取工具_使JavaDoc保持最新状态的工具
  7. 万圣节海报素材PSD分层模板
  8. 宜昌方言RAP 说唱 《在宜昌》
  9. android技巧:把自己的app变成手机系统自带的app[/system/app]
  10. Ubuntu 9.04安装永中Office 2009
  11. Fl Studio20切换中文教程汉化补丁包
  12. qq音乐服务器的位置,QQ音乐的歌曲真实地址解析
  13. c语言志愿者信息管理系统,基于C/S架构的青年志愿者管理系统
  14. 经典中的经典,古龙名著《陆小凤》决战紫禁之巅--叶西大战原文
  15. 采用全球面螺旋线的 光纤陀螺仪
  16. Qt+ffmpeg+x264远程协助软件Weekday技术原理及源码剖析
  17. C语言二级必须编译吗,c语言是计算机二级吗
  18. selenium之反反爬虫
  19. 别了,亲爱的读者朋友们!!让我们别处再相逢!
  20. nginx 如何使用rewrite

热门文章

  1. 造血干细胞扩增、转染以及基因编辑优化解决方案
  2. 2023年智能无人系统与人工智能国际会议(SIUSAI 2023)
  3. 仿918回忆模特写真网整站数据库源码 zblog内核,
  4. 51nod 1301 集合异或和 动态规划
  5. 基于51单片机的智能护眼台灯设计proteus仿真原理图PCB
  6. win7下载python3.7.4_Python for windows 下载
  7. 解答:为什么判断一个数是否为素数时只需开平方根就行了!
  8. 计算机配件及其对应作用,电脑配件与每个配件作用详细完整的解释
  9. 设置 核心内存转储后无效_从内存转储的第1部分(共3部分)调查无效的程序异常
  10. 计算机外部设备培训教学计划,最新计算机培训教学计划(8页)-原创力文档