我在地球表面有一个点,我将其转换为地球中心的向量。
我有一个以度数为单位的真北航向,描述了该点在地球表面上的行进路径。
我需要计算一个向量,该向量垂直于该点沿地球表面的路径创建的平面。
我尝试使用此处描述的方法计算路径上的任意点 ,然后取两个向量的叉积,但是它似乎不够准确,而且开销似乎比必要的要多。
这与我的另一篇文章ray-polygon-intersection-point-on-the-surface-of-a-sphere 有关。
我在地球表面有一个点,我将其转换为地球中心的向量。
我有一个以度数为单位的真北航向,描述了该点在地球表面上的行进路径。
我需要计算一个向量,该向量垂直于该点沿地球表面的路径创建的平面。
我尝试使用此处描述的方法计算路径上的任意点 ,然后取两个向量的叉积,但是它似乎不够准确,而且开销似乎比必要的要多。
这与我的另一篇文章ray-polygon-intersection-point-on-the-surface-of-a-sphere 有关。
我假设您正在尝试计算一个位于路径平面中的向量,而不是垂直于它(因为您已经有了一个向量 - 即从原点到您的点的向量)。
您首先需要计算位于该平面上的向量,该向量指向正北和正东。为此,我们将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
以下是我对您的问题的理解:
如果我理解正确,您可以按以下方式进行:
纬度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)]与运动矢量。(那个数学会很乱,最好让电脑处理)
您已经有 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 是您正在寻找的答案。