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

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

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

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

坐标系的换算,其实就是坐标原点之间的转换。比如发射导弹,首先瞄准,然后发射,这里面就包括两个动作:旋转和平移。如上图,旋转分为两步,经度(Z轴)旋转和纬度(X轴)旋转,分别是上图中绿色和蓝色两个过程。

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

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

2矩阵的几何意义

如上是两个二元一次方式组,不难推算,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所体现的向量意义。现在,我们再体会一下之前的矩阵,是否有一点亲切。


3优化

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

回到这个问题,我们把坐标转换抽象成矩阵问题,对应的几何意义就是该点的切面和法线。

假设是一个圆,如下,圆心到该点就是其切面法线,这个向量很容易得出,通过点乘可以很容易的得到法线对应该点的垂线。

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

  • 减法求出Up向量

  • 点乘求出East向量

  • 叉乘求出North向量


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

Cesium之球心坐标与本地坐标的更多相关文章

  1. 轨迹系列5——验证轨迹GPS坐标转换为本地坐标的四/七参数是否准确的一种方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 目前对多个项目轨迹不准确的情况做了排查,发现导致轨迹偏移百分 ...

  2. unity---世界坐标和本地坐标的转换

    会受到缩放的影响 用的比较多的是 本地坐标转换为世界坐标,比如在自己周围释放物体 当物体发生旋转,方向会发生变化

  3. Unity 本地坐标到世界坐标,世界坐标到本地坐标

    世界=>本地 public GameObject mTarget; public GameObject mPar; //这个注意一定要是mTarget的第一父物体. // Use this fo ...

  4. [UE4]世界坐标、本地坐标

    本地坐标 世界坐标

  5. 白鹭引擎 - 本地坐标和舞台坐标的转化 ( globalToLocal, localToGlobal )

    class Main extends egret.DisplayObjectContainer { /** * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用父类的构造函数 ...

  6. UGUI世界坐标转换为UI本地坐标(游戏Hud的实现)

    实现世界坐标的原理是: 世界坐标和UGUI的坐标分属两个坐标系,他们之间是无法进行转换的,需要通过屏幕坐标系来进行转换(因为屏幕坐标是固定的),即先将游戏场景中的世界坐标通过游戏场景Camera转化为 ...

  7. 网络游戏开发-客户端4 关于Egret的本地坐标和舞台坐标

    因为最近公司事情比较多,所以没怎么更新博客. 不过咱们这个游戏还是在继续往下写. 今天晚上打算写斗地主的出牌动画,遇到一个问题,就是关于本地坐标和舞台坐标的计算问题 在Egret官网的解释是:x 和 ...

  8. 地图坐标转换 -- 火星坐标与GPS坐标

    第一次处理地理位置的数据的人,没什么经验,往往掉入很多坑浪费不少时间.我也是刚刚从坑里爬出来.这篇博文主要是把入门GPS轨迹分析的经验总结一下,以方便大家少走些弯路. (1)可视化 GPS 路径 刚拿 ...

  9. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

    火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...

随机推荐

  1. 存储过程与SQL语句如何选择

    58到家数据库30条军规,有一条是“禁止使用存储过程.视图.触发器.Event”, 高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”, 并发量大的情况下,这些功能很可能 ...

  2. Linux内存中的 buffer 和 cache 到底是个什么东东?

    Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buffers cached 前面四项都比较好理解,一看我也就知道啥意思了.但 ...

  3. iOS集成ApplePay

    Apple Pay正式在国内上线的那天,一起工作的小伙伴就走进了Starbucks,7-11等带有银联闪付的店进行了尝鲜.不管是否要再次输入一次密码,但是它的出现确实给我们带来了极大的便捷.下面就尝试 ...

  4. JAVA-FTP批量大文件传输

    FTP的具体使用      FTP是一种网络协议,用于进行不同服务器主机之间的文件传输,或者简单地说两台不同IP的机器之间的文件传输.在java中我们什么时候需要用到FTP文件传输呢?比如两台服务器的 ...

  5. 【js】基本类型和引用类型的区别

    1.保存方式:(一脸懵逼???) 基本类型是按值访问的,可以在变量的生命周期改变它,但是它是储存在哪里的呢?在浏览器缓存吗?[执行环境中定义的所有变量和函数都存储在执行环境的变量对象里,变量对象我们编 ...

  6. css秘密花园

    picture元素 http://www.w3cplus.com/responsive/responsive-images-101-part-6-picture-element.htmlCHAPTER ...

  7. HttpServletRequest 各种方法总结

    HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象 ...

  8. idea 使用常见问题处理

    问题一: 项目中使用了 lombok,但是代码中一直报错,提示 bean 注入失败,set 和 get 方法都飘红 解决:idea 中安装 lombok 插件,安装方法自行百度吧~ 如果是用的 ecl ...

  9. Java基础——深入理解Java中的final关键字(转载)

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  10. Swift3.0 函数闭包与OC Block

    刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> S ...