计算垂直于由点和真北航向描述的平面的 3d 矢量

Posted

技术标签:

【中文标题】计算垂直于由点和真北航向描述的平面的 3d 矢量【英文标题】:Calculate 3d Vector perpendicular to plane described by a Point and True North Heading 【发布时间】:2009-04-02 01:36:15 【问题描述】:

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

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

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

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

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

【问题讨论】:

你能清除你的输入吗? “表面上的点路径”意味着多个点,不是吗?以及如何指定北航向?一个角度,一个从该点指向北极的矢量,还是其他的东西? 如果将真北航向指定为矢量并且您的点位于表面上,则您已固定了一个平面。但是垂直于该平面的矢量与真正的北航向共线。我不确定你要计算什么。 我在 Lat,Lon 有一个点,我正在从地球中心转换为向量。我有一个以正北度数为单位的角度,它描述了地球表面上这一点将要经过的路径。我基本上需要能够将 Degrees North 转换为 3d 矢量,然后我可以完成剩下的工作。 【参考方案1】:

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

您首先需要计算位于该平面上的向量,该向量指向正北和正东。为此,我们将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

【讨论】:

我终于得到了相同的结论,无法更好地解释它。 +1【参考方案2】:

这是我对您的问题的理解:

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

如果我理解正确的话,你可以这样做:

    纬度lat,经度lng的“真北矢量”由

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

    一个垂直于“真北向量”的向量,它指向一条纬线(向东),由

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

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

    [ -(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 是您的航向角。

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

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

【讨论】:

【参考方案3】:

您已经有 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

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

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

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

A = RT

A 是您正在寻找的答案。

【讨论】:

以上是关于计算垂直于由点和真北航向描述的平面的 3d 矢量的主要内容,如果未能解决你的问题,请参考以下文章

将共面的3D点集映射到它们的平面2D坐标

基于磁力计和陀螺仪的北向计算

找到与已知 Homography 的平面平行的平面的 Homography

如何通过点和法线获得平面顶点

我可以在 iPhone 的 CLLocationManager 中设置自定义位置吗

MySQL点和圆之间的距离