我正在尝试编写一个执行以下操作的算法.
给定当前位置(在方位角和倾角中)和目标位置(再次在A,I中)我应该沿着什么方向行进以通过最短路径行进.返回值可能类似于向量A = -1,I = +0.5,然后我可以根据步长/时间进行缩放.
通过使用大圆可以找到最短路径,这很容易可视化,但是由于我的坐标系不连续,所以很难像上面那样实现.
我的坐标系如下(想象一下站在球体前面)
沿赤道沿前侧行进时方位角为0~pi,沿赤道沿后侧行驶时方位角为0~-pi.
当从球体的顶部到底部行进时,倾斜度为0~ + pi.
因此,给定这个非连续坐标系,如何创建一个决策函数,说"增加A"以在最短路径上行进?
你有几个选择。第一种是使用半正矢公式。这里有一些 Javascript 源代码。它需要使用更传统的纬度/经度,其中赤道位于 0 纬度,极点位于 +/- π 或 +/- 90° 纬度(取决于您的单位),经度在 [-180°, 180° 范围内) 或 [-π, π) 再次取决于您的单位。您可以反复查找中点,直到获得适合您需要的近似路径。方位角/倾角向量只是两个相邻点之间的纬度/经度之差,但随着时间的推移,如果您重复将这些纬度/经度增量应用到代理的位置,这可能会导致错误。
\n\n另一种可能适合您的方法是将起始和结束位置的球面坐标转换为笛卡尔坐标,将它们称为起点和终点的点u b和u e 。连接两点的大圆的法向量v是两者的叉积(即v = u b x u e),角度 θ 只是归一化内积的反余弦(即 θ = cos -1 ( ( u e \xe2\x88\x99 u e ) / (| u b || u e ))。然后,您可以使用四元数旋转并围绕向量v从 0 迭代到 θ以实际导航路径。使用这种方法,路径上某个点p的实际瞬时向量就是p x v,或者您可以通过使用路径上两个相邻点之间的笛卡尔差来近似它。
\n| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |