计算垂直于由点和真北航向描述的平面的 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)
将指向正北,并与球体相切。
现在对 n
和 e
进行归一化处理,您就得到了切线空间的标准正交基。要找到方向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 矢量的主要内容,如果未能解决你的问题,请参考以下文章
找到与已知 Homography 的平面平行的平面的 Homography