球体方向决定的最短路径

时间:2011-04-29 11:49:13

标签: math trigonometry

我正在尝试编写一个执行以下操作的算法。

给定当前位置(在方位角和倾角中)和目标位置(再次在A,I中)我应该沿着什么方向行进以通过最短路径行进。返回值可能类似于向量A = -1,I = +0.5,然后我可以根据步长/时间进行缩放。

使用a great circle可以找到最短路径,这很容易想象,但是很难像上面那样实现,因为我的坐标系不连续。

我的坐标系如下(想象一下站在球体前面)

沿赤道沿前侧行进时方位角为0~pi,沿赤道沿赤道行驶时为0~-pi。

从球体的顶部到底部行进时,倾角为0~ + pi。

所以给定这个非连续坐标系,如何创建一个决策函数,说“增加A”以便在最短的路径上行进?

1 个答案:

答案 0 :(得分:3)

你有几种选择。第一种是使用Haversine formulation。有一些Javascript源代码here。它需要使用更传统的纬度/经度,其中赤道在0纬度,极点在+/-π或+/- 90°纬度(取决于您的单位),经度在[-180°,180°范围内] )或[-π,π)再次取决于您的单位。您可以重复找到中点,直到找到满足您需求的近似路径。方位角/倾斜向量只是两个相邻点之间纬度/经度的差异,但是如果你反复将这些纬度/经度增量应用到你的代理位置,这可能会导致错误。

另一种可能适合您的方法是将起点和终点位置的球坐标转换为笛卡尔坐标,称之为 u b u e 表示起点和终点。连接两点的大圆的法线向量 v 是两者的cross product(即 v < / b> = u b x u e )和角度θ只是归一化内积的反余弦(即θ= cos -1 (( u e u e )/(| u b || u e ))。然后您可以使用quaternion rotation并从0到θ迭代向量 v 实际导航路径。通过这种方法,实际的瞬时向量在某一点 p 沿着路径只是 p x v ,或者您可以通过使用两者之间的笛卡尔差异来近似沿路径的相邻点。