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

摘要:
如图所示,蓝色坐标系是球形中心坐标,而绿色坐标系是以球体上的点为原点的局部坐标系。确切地说,它是由相应球的切平面和法线组成的空间。ColPicture矩阵能够精确地解决坐标变换问题,因为它的ColPicture中体现了向量意义。回到这个问题,我们将坐标变换抽象为矩阵问题,对应的几何意义是点的切平面和法线。假设它是一个圆。如下图所示,其切平面的法线是从圆心到该点。这个矢量很容易得到。法线与点的垂直可以通过点乘法很容易地获得。

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

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

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

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

4

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

764px-Transf_ECEF_&_ENU_Coord_Fig_1

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

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

1

2

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

6

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

矩阵的几何意义

 7

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

8

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

1

Row Picture

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

9

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

2

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

3

Col Picture

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

10

优化

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

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

5

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

  1. 减法求出Up向量

  2. 点乘求出East向量

  3. 叉乘求出North向量

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

转载本站文章《Cesium球心坐标与本地坐标系经纬转换的数学原理—矩阵变换》,
请注明出处:https://www.zhoulujun.cn/html/theory/Mathematics/Geometry/8330.html

免责声明:文章转载自《Cesium球心坐标与本地坐标系经纬转换的数学原理—矩阵变换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ring buffer【sql server】“因为数据库正在使用,所以无法获得对数据库的独占访问权” 解决方案汇总下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RNN学习笔记

传统的语言模型在预测序列中的下一个单词时只会考虑到前面的有限个单词,RNN与之不同,RNN网络会根据前面已经出现的所有输入来调整整个网络。下图是RNN网络的典型结构: Xt表示在t时刻的输入,ht表示t时刻的隐藏层状态,yt表示t时刻的输出。每一个隐藏层都有许多的神经元,这些神经元将上一层的输入做线性变换(矩阵乘法,也就是乘以权重),然后再使用非线性激活...

遍历螺旋矩阵的技巧

遇见过挺多次,总结了一下方法,以后写的时候就不需要再慢慢想怎么模拟了 螺旋遍历数组方法: 按层模拟,从最外层开始 每次从第一个元素开始,→ ↓ ← ↑ 为一轮,通过进行操作的总次数判断是否结束 定义up,down,left,right表示 → ↓ ← ↑ 对应行的边界 up = 0; down = matrix.length-1 ; left = 0 ;...

特征分解 奇异值分解

特征分解:将矩阵分 解成一组特征向量和特征值。 方阵 A 的 特征向量(eigenvector)是指与 A 相乘后相当于对该向量进行缩放 的非零向量 v 标量 λ 被称为这个特征向量对应的 特征值(eigenvalue)。(类似地,我们也可以 定义 左特征向量(left eigenvector)v⊤A = λv⊤,但...

关于three.js中的矩阵更新

目录 1. 概述 2. 详解 1. 概述 使用如下代码绘制一个面: 'use strict'; function init() { //console.log("Using Three.js version: " + THREE.REVISION); // create a scene, that will hold a...

基于移动最小二乘的图像变形和曲线拟合

在最近的项目中经常遇到给出几个点需要拟合出一条曲线。 在离散的点云中,求曲线曲面拟合,不能简单地连接这些点,如果知道曲线曲面的形式,如为二次曲线等,可以简单地使用最小二乘法估计参数;但如果曲线曲面形式未知,可以使用移动最小二乘法或者主曲线方法。 转载:https://blog.csdn.net/liumangmao1314/article/details/...

神经网络(11)--具体实现:unrolling parameters

我们需要将parameters从矩阵unrolling到向量,这样我们就可以使用adanced optimization routines. unroll into vectors costFunction与fminunc里面的theta都是n+1维的向量,costFunction的返回值gradient也是n+1维的向量。 但是当我们使用神经网络时,我...