4

我在地球表面有一个点,我将其转换为地球中心的向量。

我有一个以度数为单位的真北航向,描述了该点在地球表面上的行进路径。

我需要计算一个向量,该向量垂直于该点沿地球表面的路径创建的平面。

我尝试使用此处描述的方法计算路径上的任意点 ,然后取两个向量的叉积,但是它似乎不够准确,而且开销似乎比必要的要多。

这与我的另一篇文章ray-polygon-intersection-point-on-the-surface-of-a-sphere 有关

4

3 回答 3

5

我假设您正在尝试计算一个位于路径平面中的向量,而不是垂直于它(因为您已经有了一个向量 - 即从原点到您的点的向量)。

您首先需要计算位于该平面上的向量,该向量指向正北和正东。为此,我们将P您的点O称为原点,并且N = (0, 0, R)是球体顶部的点。然后

e = cross(N - P, P - O)

是指向正东的向量,并且与球体相切,因为它垂直于P - O球体的半径。

出于类似的原因

n = cross(e, P - O)

将指向正北,并将与球体相切。

现在归一化ne,你就得到了切线空间的正交基。要找到一个方向上的向量theta(例如,从正东轴逆时针方向,以简化数学运算),只需取一点e和一点n

v = cos(theta) * e + sin(theta) * n
于 2009-04-02T02:27:12.110 回答
0

以下是我对您的问题的理解:

  • 您在地球表面上有一个点,指定为纬度/经度坐标
  • “真北”方向是该点的人将通过最直接的可能路线到达(地理)北极的方向。也就是说,“真北矢量”在您选择的点与地球表面相切,并直接指向北方,平行于经线。
  • 该点的运动方向将(最初)在您选择的点与地球表面相切。
  • 您与真北有一个以度数为单位的角度,它指定了该点将要移动的航向。
  • 这个角度是“真北向量”和点的运动方向之间的角度。
  • 您想要计算在该点与地球表面相切但垂直于该点运动方向的向量。

如果我理解正确,您可以按以下方式进行:

  1. 纬度lat,经度的“真北向量”lng由下式给出

    [-sin(lat) * cos(lng), -sin(lat) * sin(lng), cos(lat)]

  2. 垂直于“真北向量”的向量,该向量沿纬度线(向东)指向,由下式给出

    [-sin(lng), cos(lng), 0]

  3. 由于这两个向量标识与地球表面相切的平面,并且指定点运动方向的向量也在该平面内,因此您的运动向量是前两个的线性组合:

    [
    -(sin(lat) * cos(lng) * cos(th) + sin(lng) * sin(th))
    -(sin(lat) * sin(lng) * cos(th) - cos(lng) * sin(th))
    cos(lat) * cos(th)
    ]
    th你的航向角在哪里。

  4. 要找到垂直于该运动矢量的矢量,您只需取半径矢量的叉积(即从地球中心指向您的点的矢量,

    [cos(lat) * cos(lng), cos(lat) * sin(lng), sin(lat)]
    与运动矢量。(那个数学会很乱,最好让电脑处理)

于 2009-04-02T02:33:22.937 回答
0

您已经有 2 个向量:

N = (0,0,1) 点从原点直接向上。

P = (a,b,c) 从原点到您的点。

计算到你的点的单位向量 U = P/|P|

计算垂直于 U 和 N 的单位向量 E = UXN

计算垂直于 U 和 E 的单位向量(这将与球体相切) T = UXE T 可能指向北或南,因此如果 Tz < 0,则将 T 乘以 -1。

T 现在指向正北,并且平行于在 P 处与球体相切的平面。

您现在有足够的信息来构造一个旋转矩阵 (R),因此您可以围绕 U 旋转 T。您可以在wikipedia上找到如何制作一个围绕任何轴旋转的矩阵:

使用 R,您可以计算指向行进方向的矢量。

A = RT

A 是您正在寻找的答案。

于 2009-04-02T05:06:18.887 回答