计算垂直于Point和True North Heading描述的平面的3d矢量

时间:2009-04-02 01:36:15

标签: math 3d vector geometry geolocation

我在地球表面有一个点,我正在转换为地球中心的矢量。

我有一个真北角度,描述了点在地球表面的行进路径。

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

我尝试使用描述的here方法计算路径上的任意点 然后取两个向量的交叉乘积,但它似乎不够准确,似乎比必要的开销更大。

这与我的其他帖子ray-polygon-intersection-point-on-the-surface-of-a-sphere有关。

3 个答案:

答案 0 :(得分:4)

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

首先需要计算位于该平面中指向正北和正东的矢量。要执行此操作,请致电P您的观点,O原点,N = (0, 0, R)是您球体顶部的点。然后

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

是一个向东指向的矢量,与球体相切,因为它垂直于P - O,即球体的半径。

出于类似的原因

n = cross(e, P - O)

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

现在将ne标准化,并且您的点处的切线空间有标准正交基础。要在theta方向上找到一个向量(比如,从正东轴逆时针方向,以简化数学运算),只需要en一点:

v = cos(theta) * e + sin(theta) * n

答案 1 :(得分:0)

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

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

如果我理解了所有这些,你可以按照以下方式做到:

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

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

  2. 给出
  3. 垂直于“真北向量”的向量,沿纬线(向东)指向

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

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

    [
    -(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是你的标题角度。

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

    {{ 2}}用运动矢量。(数学会很麻烦,最好让计算机处理它)

答案 2 :(得分:0)

您已有2个向量:

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

P =(a,b,c)从原点指向你的点。

计算您的点的单位矢量 U = P / | P |

计算垂直于U和N的单位矢量 E = U X N

计算垂直于U和E的单位向量(这将与球体相切) T = U X E. T可以指向北方或南方,所以 如果T.z< 0,将T乘以-1。

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

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

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

A = RT

答案是您正在寻找的答案。