球心坐标与本地坐标
1 球心坐标(ECEF)与本地坐标(NEU)
假如你来到一个陌生城市,你很可能需要问路、通常会告诉你向北走100米,右转,向东走100米,理解起来很直观。
你给儿子买了一个地球仪,你从北京(39,115)转到伦敦 (51,0),这个动作就可以分解为两步:先转到同一个经度(39,0),在转到同一个维度(51,0)
这个例子体现了一个问题:不同的地理范围下会使用更适合的坐标系。比如前者是局部的平面坐标,而后者是球面坐标。
因此,同一个点相对不同的原点,具有不同的相对位置:既是地球上的一个经纬度,又是其所处的局部坐标的位置。

那么如何从以球心为原点的球面坐标变换到以球面上任意一点为原点的局部坐标,坐标系之间的转换,答案就是矩阵。
meridian : 子午圈 Greenwich meridian:格林威治子午线; equator :赤道
North Celestial Pole:北天极是地轴和天球于北方相交的一点,即北半球星空旋转的虚拟中心点。
zenith:天顶(太阳或月亮在天空中的最高点)

坐标系的换算,其实就是坐标原点之间的转换。 变换一般需要进行旋转和平移操作。
如上图,旋转分为两步,经度(Z轴)旋转和纬度(X轴)旋转,分别是上图中绿色和蓝色两个过程。

上图中,R1 、R2、R3 分别对应对 X、Y、Z 轴的旋转矩阵(若坐标系的左下角是坐标原点,则R1和R3是顺时针旋转,R2是逆时针旋转;若左上角是坐标原点,则相反)

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

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

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

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

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

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

如上图,分别是向量[1,2]
和[-1,1]
,我们已经知道x
和y
的值分别为1
,2
。
如上图,我们把向量[-1,1]
延长2倍,也就是[-2,2]
,然后将该向量平移到[1,2]
点,也就是向量1的终点(文章的意思是把向量的起点移到[1,2]
处,注意图上的两个坐标轴的度量不是成比例的),如下图,就是向量加的计算过程,[1,2] + [-1,1] * 2 = [-1,4]
,几何意义就是在该向量偏移量的累加。

矩阵之所以能够解决坐标转换问题,正是因为其 Col Picture 所体现的向量意义。现在,我们再体会一下之前的矩阵,是否有一点亲切。
3 优化
如上是矩阵公式推算和几何意义的解释。
看上去是几何问题,实际上是函数问题,这正是矩阵的价值所在。
但函数问题也有一个缺点,特别是矩阵,计算量太大,占用内存也不低。大家在做数学题的时候应该都有过类似感觉,一个代数题好复杂,计算了半天,还容易犯错,好不容易才得出答案。这时老师用几何的思路来求解,一目了然。
回到这个问题,我们把坐标转换抽象成矩阵问题,对应的几何意义就是该点的切面和法线。
假设是一个圆,如下,圆心到该点就是其切面法线,这个向量很容易得出,通过点乘可以很容易的得到法线对应该点的垂线。

这时,把这个圆看成一个球,两条黑线的叉乘就可以得出另一个垂线,这就是该点对应的NEU坐标的三个轴,是不是也很容易理解,而且只需要三个步骤,计算量很小:
- 减法求出
Up
向量 - 点乘求出
East
向量 - 叉乘求出
North
向量
这正是 Cesium 中提供的思路,对应Transforms.eastNorthUpToFixedFrame方法
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!